<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<unit xmlns="http://www.sdml.info/srcML/src" xmlns:cpp="http://www.sdml.info/srcML/cpp" xmlns:lit="http://www.sdml.info/srcML/literal" xmlns:op="http://www.sdml.info/srcML/operator" xmlns:type="http://www.sdml.info/srcML/modifier" xmlns:pos="http://www.sdml.info/srcML/position" language="C++" filename="json_reader.cpp" pos:tabs="8"><cpp:include pos:line="1" pos:column="1">#<cpp:directive pos:line="1" pos:column="2">include</cpp:directive> <cpp:file pos:line="1" pos:column="10">&lt;json/reader.h&gt;</cpp:file></cpp:include>
<cpp:include pos:line="2" pos:column="1">#<cpp:directive pos:line="2" pos:column="2">include</cpp:directive> <cpp:file pos:line="2" pos:column="10">&lt;json/value.h&gt;</cpp:file></cpp:include>
<cpp:include pos:line="3" pos:column="1">#<cpp:directive pos:line="3" pos:column="2">include</cpp:directive> <cpp:file pos:line="3" pos:column="10">&lt;utility&gt;</cpp:file></cpp:include>
<cpp:include pos:line="4" pos:column="1">#<cpp:directive pos:line="4" pos:column="2">include</cpp:directive> <cpp:file pos:line="4" pos:column="10">&lt;cstdio&gt;</cpp:file></cpp:include>
<cpp:include pos:line="5" pos:column="1">#<cpp:directive pos:line="5" pos:column="2">include</cpp:directive> <cpp:file pos:line="5" pos:column="10">&lt;cassert&gt;</cpp:file></cpp:include>
<cpp:include pos:line="6" pos:column="1">#<cpp:directive pos:line="6" pos:column="2">include</cpp:directive> <cpp:file pos:line="6" pos:column="10">&lt;cstring&gt;</cpp:file></cpp:include>
<cpp:include pos:line="7" pos:column="1">#<cpp:directive pos:line="7" pos:column="2">include</cpp:directive> <cpp:file pos:line="7" pos:column="10">&lt;iostream&gt;</cpp:file></cpp:include>
<cpp:include pos:line="8" pos:column="1">#<cpp:directive pos:line="8" pos:column="2">include</cpp:directive> <cpp:file pos:line="8" pos:column="10">&lt;stdexcept&gt;</cpp:file></cpp:include>

<cpp:if pos:line="10" pos:column="1">#<cpp:directive pos:line="10" pos:column="2">if</cpp:directive> <expr><name pos:line="10" pos:column="5">_MSC_VER</name> <op:operator pos:line="10" pos:column="14">&gt;=</op:operator> <lit:literal type="number" pos:line="10" pos:column="17">1400</lit:literal></expr></cpp:if> <comment type="line" pos:line="10" pos:column="22">// VC++ 8.0</comment>
<cpp:pragma pos:line="11" pos:column="1">#<cpp:directive pos:line="11" pos:column="2">pragma</cpp:directive> warning( disable : 4996 )</cpp:pragma>   <comment type="line" pos:line="11" pos:column="37">// disable warning about strdup being deprecated.</comment>
<cpp:endif pos:line="12" pos:column="1">#<cpp:directive pos:line="12" pos:column="2">endif</cpp:directive></cpp:endif>

<namespace pos:line="14" pos:column="1">namespace <name pos:line="14" pos:column="11">Json</name> <block pos:line="14" pos:column="16">{

<comment type="line" pos:line="16" pos:column="1">// Implementation of class Features</comment>
<comment type="line" pos:line="17" pos:column="1">// ////////////////////////////////</comment>

<constructor><name><name pos:line="19" pos:column="1">Features</name><op:operator pos:line="19" pos:column="9">::</op:operator><name pos:line="19" pos:column="11">Features</name></name><parameter_list pos:line="19" pos:column="19">()</parameter_list>
   <member_list pos:line="20" pos:column="4">: <call><name pos:line="20" pos:column="6">allowComments_</name><argument_list pos:line="20" pos:column="20">( <argument><expr><lit:literal type="boolean" pos:line="20" pos:column="22">true</lit:literal></expr></argument> )</argument_list></call>
   , <call><name pos:line="21" pos:column="6">strictRoot_</name><argument_list pos:line="21" pos:column="17">( <argument><expr><lit:literal type="boolean" pos:line="21" pos:column="19">false</lit:literal></expr></argument> )</argument_list></call>
</member_list><block pos:line="22" pos:column="1">{
}</block></constructor>


<function><type><name pos:line="26" pos:column="1">Features</name></type> 
<name><name pos:line="27" pos:column="1">Features</name><op:operator pos:line="27" pos:column="9">::</op:operator><name pos:line="27" pos:column="11">all</name></name><parameter_list pos:line="27" pos:column="14">()</parameter_list>
<block pos:line="28" pos:column="1">{
   <return pos:line="29" pos:column="4">return <expr><call><name pos:line="29" pos:column="11">Features</name><argument_list pos:line="29" pos:column="19">()</argument_list></call></expr>;</return>
}</block></function>


<function><type><name pos:line="33" pos:column="1">Features</name></type> 
<name><name pos:line="34" pos:column="1">Features</name><op:operator pos:line="34" pos:column="9">::</op:operator><name pos:line="34" pos:column="11">strictMode</name></name><parameter_list pos:line="34" pos:column="21">()</parameter_list>
<block pos:line="35" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="36" pos:column="4">Features</name></type> <name pos:line="36" pos:column="13">features</name></decl>;</decl_stmt>
   <expr_stmt><expr><name pos:line="37" pos:column="4">features</name><op:operator pos:line="37" pos:column="12">.</op:operator><name pos:line="37" pos:column="13">allowComments_</name> <op:operator pos:line="37" pos:column="28">=</op:operator> <lit:literal type="boolean" pos:line="37" pos:column="30">false</lit:literal></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="38" pos:column="4">features</name><op:operator pos:line="38" pos:column="12">.</op:operator><name pos:line="38" pos:column="13">strictRoot_</name> <op:operator pos:line="38" pos:column="25">=</op:operator> <lit:literal type="boolean" pos:line="38" pos:column="27">true</lit:literal></expr>;</expr_stmt>
   <return pos:line="39" pos:column="4">return <expr><name pos:line="39" pos:column="11">features</name></expr>;</return>
}</block></function>

<comment type="line" pos:line="42" pos:column="1">// Implementation of class Reader</comment>
<comment type="line" pos:line="43" pos:column="1">// ////////////////////////////////</comment>

<comment type="block" pos:line="45" pos:column="1">/*
static inline bool 
in( Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4 )
{
   return c == c1  ||  c == c2  ||  c == c3  ||  c == c4;
}

static inline bool 
in( Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4, Reader::Char c5 )
{
   return c == c1  ||  c == c2  ||  c == c3  ||  c == c4  ||  c == c5;
}
*/</comment>

<function><type><name pos:line="59" pos:column="1">static</name> <name pos:line="59" pos:column="8">bool</name></type> 
<name pos:line="60" pos:column="1">containsNewLine</name><parameter_list pos:line="60" pos:column="16">( <param><decl><type><name><name pos:line="60" pos:column="18">Reader</name><op:operator pos:line="60" pos:column="24">::</op:operator><name pos:line="60" pos:column="26">Location</name></name></type> <name pos:line="60" pos:column="35">begin</name></decl></param>, 
                 <param><decl><type><name><name pos:line="61" pos:column="18">Reader</name><op:operator pos:line="61" pos:column="24">::</op:operator><name pos:line="61" pos:column="26">Location</name></name></type> <name pos:line="61" pos:column="35">end</name></decl></param> )</parameter_list>
<block pos:line="62" pos:column="1">{
   <for pos:line="63" pos:column="4">for ( <init pos:line="63" pos:column="10">;</init><condition><expr><name pos:line="63" pos:column="11">begin</name> <op:operator pos:line="63" pos:column="17">&lt;</op:operator> <name pos:line="63" pos:column="19">end</name></expr>;</condition> <incr><expr><op:operator pos:line="63" pos:column="24">++</op:operator><name pos:line="63" pos:column="26">begin</name></expr></incr> )
      <if pos:line="64" pos:column="7">if <condition pos:line="64" pos:column="10">( <expr><op:operator pos:line="64" pos:column="12">*</op:operator><name pos:line="64" pos:column="13">begin</name> <op:operator pos:line="64" pos:column="19">==</op:operator> <lit:literal type="char" pos:line="64" pos:column="22">'\n'</lit:literal>  <op:operator pos:line="64" pos:column="28">||</op:operator>  <op:operator pos:line="64" pos:column="32">*</op:operator><name pos:line="64" pos:column="33">begin</name> <op:operator pos:line="64" pos:column="39">==</op:operator> <lit:literal type="char" pos:line="64" pos:column="42">'\r'</lit:literal></expr> )</condition><then pos:line="64" pos:column="48">
         <return pos:line="65" pos:column="10">return <expr><lit:literal type="boolean" pos:line="65" pos:column="17">true</lit:literal></expr>;</return></then></if></for>
   <return pos:line="66" pos:column="4">return <expr><lit:literal type="boolean" pos:line="66" pos:column="11">false</lit:literal></expr>;</return>
}</block></function>

<function><type><name pos:line="69" pos:column="1">static</name> <name><name pos:line="69" pos:column="8">std</name><op:operator pos:line="69" pos:column="11">::</op:operator><name pos:line="69" pos:column="13">string</name></name></type> <name pos:line="69" pos:column="20">codePointToUTF8</name><parameter_list pos:line="69" pos:column="35">(<param><decl><type><name pos:line="69" pos:column="36">unsigned</name> <name pos:line="69" pos:column="45">int</name></type> <name pos:line="69" pos:column="49">cp</name></decl></param>)</parameter_list>
<block pos:line="70" pos:column="1">{
   <decl_stmt><decl><type><name><name pos:line="71" pos:column="4">std</name><op:operator pos:line="71" pos:column="7">::</op:operator><name pos:line="71" pos:column="9">string</name></name></type> <name pos:line="71" pos:column="16">result</name></decl>;</decl_stmt>
   
   <comment type="line" pos:line="73" pos:column="4">// based on description from http://en.wikipedia.org/wiki/UTF-8</comment>

   <if pos:line="75" pos:column="4">if <condition pos:line="75" pos:column="7">(<expr><name pos:line="75" pos:column="8">cp</name> <op:operator pos:line="75" pos:column="11">&lt;=</op:operator> <lit:literal type="number" pos:line="75" pos:column="14">0x7f</lit:literal></expr>)</condition><then pos:line="75" pos:column="19"> 
   <block pos:line="76" pos:column="4">{
      <expr_stmt><expr><name pos:line="77" pos:column="7">result</name><op:operator pos:line="77" pos:column="13">.</op:operator><call><name pos:line="77" pos:column="14">resize</name><argument_list pos:line="77" pos:column="20">(<argument><expr><lit:literal type="number" pos:line="77" pos:column="21">1</lit:literal></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="78" pos:column="7">result</name><index pos:line="78" pos:column="13">[<expr><lit:literal type="number" pos:line="78" pos:column="14">0</lit:literal></expr>]</index></name> <op:operator pos:line="78" pos:column="17">=</op:operator> <call><name><name pos:line="78" pos:column="19">static_cast</name><argument_list pos:line="78" pos:column="30">&lt;<argument><name pos:line="78" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="78" pos:column="36">(<argument><expr><name pos:line="78" pos:column="37">cp</name></expr></argument>)</argument_list></call></expr>;</expr_stmt>
   }</block></then> 
   <else pos:line="80" pos:column="4">else <if pos:line="80" pos:column="9">if <condition pos:line="80" pos:column="12">(<expr><name pos:line="80" pos:column="13">cp</name> <op:operator pos:line="80" pos:column="16">&lt;=</op:operator> <lit:literal type="number" pos:line="80" pos:column="19">0x7FF</lit:literal></expr>)</condition><then pos:line="80" pos:column="25"> 
   <block pos:line="81" pos:column="4">{
      <expr_stmt><expr><name pos:line="82" pos:column="7">result</name><op:operator pos:line="82" pos:column="13">.</op:operator><call><name pos:line="82" pos:column="14">resize</name><argument_list pos:line="82" pos:column="20">(<argument><expr><lit:literal type="number" pos:line="82" pos:column="21">2</lit:literal></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="83" pos:column="7">result</name><index pos:line="83" pos:column="13">[<expr><lit:literal type="number" pos:line="83" pos:column="14">1</lit:literal></expr>]</index></name> <op:operator pos:line="83" pos:column="17">=</op:operator> <call><name><name pos:line="83" pos:column="19">static_cast</name><argument_list pos:line="83" pos:column="30">&lt;<argument><name pos:line="83" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="83" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="83" pos:column="37">0x80</lit:literal> <op:operator pos:line="83" pos:column="42">|</op:operator> <op:operator pos:line="83" pos:column="44">(</op:operator><lit:literal type="number" pos:line="83" pos:column="45">0x3f</lit:literal> <op:operator pos:line="83" pos:column="50">&amp;</op:operator> <name pos:line="83" pos:column="52">cp</name><op:operator pos:line="83" pos:column="54">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="84" pos:column="7">result</name><index pos:line="84" pos:column="13">[<expr><lit:literal type="number" pos:line="84" pos:column="14">0</lit:literal></expr>]</index></name> <op:operator pos:line="84" pos:column="17">=</op:operator> <call><name><name pos:line="84" pos:column="19">static_cast</name><argument_list pos:line="84" pos:column="30">&lt;<argument><name pos:line="84" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="84" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="84" pos:column="37">0xC0</lit:literal> <op:operator pos:line="84" pos:column="42">|</op:operator> <op:operator pos:line="84" pos:column="44">(</op:operator><lit:literal type="number" pos:line="84" pos:column="45">0x1f</lit:literal> <op:operator pos:line="84" pos:column="50">&amp;</op:operator> <op:operator pos:line="84" pos:column="52">(</op:operator><name pos:line="84" pos:column="53">cp</name> <op:operator pos:line="84" pos:column="56">&gt;&gt;</op:operator> <lit:literal type="number" pos:line="84" pos:column="59">6</lit:literal><op:operator pos:line="84" pos:column="60">)</op:operator><op:operator pos:line="84" pos:column="61">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
   }</block></then> 
   <else pos:line="86" pos:column="4">else <if pos:line="86" pos:column="9">if <condition pos:line="86" pos:column="12">(<expr><name pos:line="86" pos:column="13">cp</name> <op:operator pos:line="86" pos:column="16">&lt;=</op:operator> <lit:literal type="number" pos:line="86" pos:column="19">0xFFFF</lit:literal></expr>)</condition><then pos:line="86" pos:column="26"> 
   <block pos:line="87" pos:column="4">{
      <expr_stmt><expr><name pos:line="88" pos:column="7">result</name><op:operator pos:line="88" pos:column="13">.</op:operator><call><name pos:line="88" pos:column="14">resize</name><argument_list pos:line="88" pos:column="20">(<argument><expr><lit:literal type="number" pos:line="88" pos:column="21">3</lit:literal></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="89" pos:column="7">result</name><index pos:line="89" pos:column="13">[<expr><lit:literal type="number" pos:line="89" pos:column="14">2</lit:literal></expr>]</index></name> <op:operator pos:line="89" pos:column="17">=</op:operator> <call><name><name pos:line="89" pos:column="19">static_cast</name><argument_list pos:line="89" pos:column="30">&lt;<argument><name pos:line="89" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="89" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="89" pos:column="37">0x80</lit:literal> <op:operator pos:line="89" pos:column="42">|</op:operator> <op:operator pos:line="89" pos:column="44">(</op:operator><lit:literal type="number" pos:line="89" pos:column="45">0x3f</lit:literal> <op:operator pos:line="89" pos:column="50">&amp;</op:operator> <name pos:line="89" pos:column="52">cp</name><op:operator pos:line="89" pos:column="54">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="90" pos:column="7">result</name><index pos:line="90" pos:column="13">[<expr><lit:literal type="number" pos:line="90" pos:column="14">1</lit:literal></expr>]</index></name> <op:operator pos:line="90" pos:column="17">=</op:operator> <lit:literal type="number" pos:line="90" pos:column="19">0x80</lit:literal> <op:operator pos:line="90" pos:column="24">|</op:operator> <call><name><name pos:line="90" pos:column="26">static_cast</name><argument_list pos:line="90" pos:column="37">&lt;<argument><name pos:line="90" pos:column="38">char</name></argument>&gt;</argument_list></name><argument_list pos:line="90" pos:column="43">(<argument><expr><op:operator pos:line="90" pos:column="44">(</op:operator><lit:literal type="number" pos:line="90" pos:column="45">0x3f</lit:literal> <op:operator pos:line="90" pos:column="50">&amp;</op:operator> <op:operator pos:line="90" pos:column="52">(</op:operator><name pos:line="90" pos:column="53">cp</name> <op:operator pos:line="90" pos:column="56">&gt;&gt;</op:operator> <lit:literal type="number" pos:line="90" pos:column="59">6</lit:literal><op:operator pos:line="90" pos:column="60">)</op:operator><op:operator pos:line="90" pos:column="61">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="91" pos:column="7">result</name><index pos:line="91" pos:column="13">[<expr><lit:literal type="number" pos:line="91" pos:column="14">0</lit:literal></expr>]</index></name> <op:operator pos:line="91" pos:column="17">=</op:operator> <lit:literal type="number" pos:line="91" pos:column="19">0xE0</lit:literal> <op:operator pos:line="91" pos:column="24">|</op:operator> <call><name><name pos:line="91" pos:column="26">static_cast</name><argument_list pos:line="91" pos:column="37">&lt;<argument><name pos:line="91" pos:column="38">char</name></argument>&gt;</argument_list></name><argument_list pos:line="91" pos:column="43">(<argument><expr><op:operator pos:line="91" pos:column="44">(</op:operator><lit:literal type="number" pos:line="91" pos:column="45">0xf</lit:literal> <op:operator pos:line="91" pos:column="49">&amp;</op:operator> <op:operator pos:line="91" pos:column="51">(</op:operator><name pos:line="91" pos:column="52">cp</name> <op:operator pos:line="91" pos:column="55">&gt;&gt;</op:operator> <lit:literal type="number" pos:line="91" pos:column="58">12</lit:literal><op:operator pos:line="91" pos:column="60">)</op:operator><op:operator pos:line="91" pos:column="61">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
   }</block></then>
   <else pos:line="93" pos:column="4">else <if pos:line="93" pos:column="9">if <condition pos:line="93" pos:column="12">(<expr><name pos:line="93" pos:column="13">cp</name> <op:operator pos:line="93" pos:column="16">&lt;=</op:operator> <lit:literal type="number" pos:line="93" pos:column="19">0x10FFFF</lit:literal></expr>)</condition><then pos:line="93" pos:column="28"> 
   <block pos:line="94" pos:column="4">{
      <expr_stmt><expr><name pos:line="95" pos:column="7">result</name><op:operator pos:line="95" pos:column="13">.</op:operator><call><name pos:line="95" pos:column="14">resize</name><argument_list pos:line="95" pos:column="20">(<argument><expr><lit:literal type="number" pos:line="95" pos:column="21">4</lit:literal></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="96" pos:column="7">result</name><index pos:line="96" pos:column="13">[<expr><lit:literal type="number" pos:line="96" pos:column="14">3</lit:literal></expr>]</index></name> <op:operator pos:line="96" pos:column="17">=</op:operator> <call><name><name pos:line="96" pos:column="19">static_cast</name><argument_list pos:line="96" pos:column="30">&lt;<argument><name pos:line="96" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="96" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="96" pos:column="37">0x80</lit:literal> <op:operator pos:line="96" pos:column="42">|</op:operator> <op:operator pos:line="96" pos:column="44">(</op:operator><lit:literal type="number" pos:line="96" pos:column="45">0x3f</lit:literal> <op:operator pos:line="96" pos:column="50">&amp;</op:operator> <name pos:line="96" pos:column="52">cp</name><op:operator pos:line="96" pos:column="54">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="97" pos:column="7">result</name><index pos:line="97" pos:column="13">[<expr><lit:literal type="number" pos:line="97" pos:column="14">2</lit:literal></expr>]</index></name> <op:operator pos:line="97" pos:column="17">=</op:operator> <call><name><name pos:line="97" pos:column="19">static_cast</name><argument_list pos:line="97" pos:column="30">&lt;<argument><name pos:line="97" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="97" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="97" pos:column="37">0x80</lit:literal> <op:operator pos:line="97" pos:column="42">|</op:operator> <op:operator pos:line="97" pos:column="44">(</op:operator><lit:literal type="number" pos:line="97" pos:column="45">0x3f</lit:literal> <op:operator pos:line="97" pos:column="50">&amp;</op:operator> <op:operator pos:line="97" pos:column="52">(</op:operator><name pos:line="97" pos:column="53">cp</name> <op:operator pos:line="97" pos:column="56">&gt;&gt;</op:operator> <lit:literal type="number" pos:line="97" pos:column="59">6</lit:literal><op:operator pos:line="97" pos:column="60">)</op:operator><op:operator pos:line="97" pos:column="61">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="98" pos:column="7">result</name><index pos:line="98" pos:column="13">[<expr><lit:literal type="number" pos:line="98" pos:column="14">1</lit:literal></expr>]</index></name> <op:operator pos:line="98" pos:column="17">=</op:operator> <call><name><name pos:line="98" pos:column="19">static_cast</name><argument_list pos:line="98" pos:column="30">&lt;<argument><name pos:line="98" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="98" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="98" pos:column="37">0x80</lit:literal> <op:operator pos:line="98" pos:column="42">|</op:operator> <op:operator pos:line="98" pos:column="44">(</op:operator><lit:literal type="number" pos:line="98" pos:column="45">0x3f</lit:literal> <op:operator pos:line="98" pos:column="50">&amp;</op:operator> <op:operator pos:line="98" pos:column="52">(</op:operator><name pos:line="98" pos:column="53">cp</name> <op:operator pos:line="98" pos:column="56">&gt;&gt;</op:operator> <lit:literal type="number" pos:line="98" pos:column="59">12</lit:literal><op:operator pos:line="98" pos:column="61">)</op:operator><op:operator pos:line="98" pos:column="62">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="99" pos:column="7">result</name><index pos:line="99" pos:column="13">[<expr><lit:literal type="number" pos:line="99" pos:column="14">0</lit:literal></expr>]</index></name> <op:operator pos:line="99" pos:column="17">=</op:operator> <call><name><name pos:line="99" pos:column="19">static_cast</name><argument_list pos:line="99" pos:column="30">&lt;<argument><name pos:line="99" pos:column="31">char</name></argument>&gt;</argument_list></name><argument_list pos:line="99" pos:column="36">(<argument><expr><lit:literal type="number" pos:line="99" pos:column="37">0xF0</lit:literal> <op:operator pos:line="99" pos:column="42">|</op:operator> <op:operator pos:line="99" pos:column="44">(</op:operator><lit:literal type="number" pos:line="99" pos:column="45">0x7</lit:literal> <op:operator pos:line="99" pos:column="49">&amp;</op:operator> <op:operator pos:line="99" pos:column="51">(</op:operator><name pos:line="99" pos:column="52">cp</name> <op:operator pos:line="99" pos:column="55">&gt;&gt;</op:operator> <lit:literal type="number" pos:line="99" pos:column="58">18</lit:literal><op:operator pos:line="99" pos:column="60">)</op:operator><op:operator pos:line="99" pos:column="61">)</op:operator></expr></argument>)</argument_list></call></expr>;</expr_stmt>
   }</block></then></if></else></if></else></if></else></if>

   <return pos:line="102" pos:column="4">return <expr><name pos:line="102" pos:column="11">result</name></expr>;</return>
}</block></function>


<comment type="line" pos:line="106" pos:column="1">// Class Reader</comment>
<comment type="line" pos:line="107" pos:column="1">// //////////////////////////////////////////////////////////////////</comment>

<constructor><name><name pos:line="109" pos:column="1">Reader</name><op:operator pos:line="109" pos:column="7">::</op:operator><name pos:line="109" pos:column="9">Reader</name></name><parameter_list pos:line="109" pos:column="15">()</parameter_list>
   <member_list pos:line="110" pos:column="4">: <call><name pos:line="110" pos:column="6">features_</name><argument_list pos:line="110" pos:column="15">( <argument><expr><call><name><name pos:line="110" pos:column="17">Features</name><op:operator pos:line="110" pos:column="25">::</op:operator><name pos:line="110" pos:column="27">all</name></name><argument_list pos:line="110" pos:column="30">()</argument_list></call></expr></argument> )</argument_list></call>
</member_list><block pos:line="111" pos:column="1">{
}</block></constructor>


<constructor><name><name pos:line="115" pos:column="1">Reader</name><op:operator pos:line="115" pos:column="7">::</op:operator><name pos:line="115" pos:column="9">Reader</name></name><parameter_list pos:line="115" pos:column="15">( <param><decl><type><name pos:line="115" pos:column="17">const</name> <name pos:line="115" pos:column="23">Features</name> <type:modifier pos:line="115" pos:column="32">&amp;</type:modifier></type><name pos:line="115" pos:column="33">features</name></decl></param> )</parameter_list>
   <member_list pos:line="116" pos:column="4">: <call><name pos:line="116" pos:column="6">features_</name><argument_list pos:line="116" pos:column="15">( <argument><expr><name pos:line="116" pos:column="17">features</name></expr></argument> )</argument_list></call>
</member_list><block pos:line="117" pos:column="1">{
}</block></constructor>


<function><type><name pos:line="121" pos:column="1">bool</name></type>
<name><name pos:line="122" pos:column="1">Reader</name><op:operator pos:line="122" pos:column="7">::</op:operator><name pos:line="122" pos:column="9">parse</name></name><parameter_list pos:line="122" pos:column="14">( <param><decl><type><name pos:line="122" pos:column="16">const</name> <name><name pos:line="122" pos:column="22">std</name><op:operator pos:line="122" pos:column="25">::</op:operator><name pos:line="122" pos:column="27">string</name></name> <type:modifier pos:line="122" pos:column="34">&amp;</type:modifier></type><name pos:line="122" pos:column="35">document</name></decl></param>, 
               <param><decl><type><name pos:line="123" pos:column="16">Value</name> <type:modifier pos:line="123" pos:column="22">&amp;</type:modifier></type><name pos:line="123" pos:column="23">root</name></decl></param>,
               <param><decl><type><name pos:line="124" pos:column="16">bool</name></type> <name pos:line="124" pos:column="21">collectComments</name></decl></param> )</parameter_list>
<block pos:line="125" pos:column="1">{
   <expr_stmt><expr><name pos:line="126" pos:column="4">document_</name> <op:operator pos:line="126" pos:column="14">=</op:operator> <name pos:line="126" pos:column="16">document</name></expr>;</expr_stmt>
   <decl_stmt><decl><type><name pos:line="127" pos:column="4">const</name> <name pos:line="127" pos:column="10">char</name> <type:modifier pos:line="127" pos:column="15">*</type:modifier></type><name pos:line="127" pos:column="16">begin</name> =<init pos:line="127" pos:column="23"> <expr><name pos:line="127" pos:column="24">document_</name><op:operator pos:line="127" pos:column="33">.</op:operator><call><name pos:line="127" pos:column="34">c_str</name><argument_list pos:line="127" pos:column="39">()</argument_list></call></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="128" pos:column="4">const</name> <name pos:line="128" pos:column="10">char</name> <type:modifier pos:line="128" pos:column="15">*</type:modifier></type><name pos:line="128" pos:column="16">end</name> =<init pos:line="128" pos:column="21"> <expr><name pos:line="128" pos:column="22">begin</name> <op:operator pos:line="128" pos:column="28">+</op:operator> <name pos:line="128" pos:column="30">document_</name><op:operator pos:line="128" pos:column="39">.</op:operator><call><name pos:line="128" pos:column="40">length</name><argument_list pos:line="128" pos:column="46">()</argument_list></call></expr></init></decl>;</decl_stmt>
   <return pos:line="129" pos:column="4">return <expr><call><name pos:line="129" pos:column="11">parse</name><argument_list pos:line="129" pos:column="16">( <argument><expr><name pos:line="129" pos:column="18">begin</name></expr></argument>, <argument><expr><name pos:line="129" pos:column="25">end</name></expr></argument>, <argument><expr><name pos:line="129" pos:column="30">root</name></expr></argument>, <argument><expr><name pos:line="129" pos:column="36">collectComments</name></expr></argument> )</argument_list></call></expr>;</return>
}</block></function>


<function><type><name pos:line="133" pos:column="1">bool</name></type>
<name><name pos:line="134" pos:column="1">Reader</name><op:operator pos:line="134" pos:column="7">::</op:operator><name pos:line="134" pos:column="9">parse</name></name><parameter_list pos:line="134" pos:column="14">( <param><decl><type><name><name pos:line="134" pos:column="16">std</name><op:operator pos:line="134" pos:column="19">::</op:operator><name pos:line="134" pos:column="21">istream</name></name><type:modifier pos:line="134" pos:column="28">&amp;</type:modifier></type> <name pos:line="134" pos:column="30">sin</name></decl></param>,
               <param><decl><type><name pos:line="135" pos:column="16">Value</name> <type:modifier pos:line="135" pos:column="22">&amp;</type:modifier></type><name pos:line="135" pos:column="23">root</name></decl></param>,
               <param><decl><type><name pos:line="136" pos:column="16">bool</name></type> <name pos:line="136" pos:column="21">collectComments</name></decl></param> )</parameter_list>
<block pos:line="137" pos:column="1">{
   <comment type="line" pos:line="138" pos:column="4">//std::istream_iterator&lt;char&gt; begin(sin);</comment>
   <comment type="line" pos:line="139" pos:column="4">//std::istream_iterator&lt;char&gt; end;</comment>
   <comment type="line" pos:line="140" pos:column="4">// Those would allow streamed input from a file, if parse() were a</comment>
   <comment type="line" pos:line="141" pos:column="4">// template function.</comment>

   <comment type="line" pos:line="143" pos:column="4">// Since std::string is reference-counted, this at least does not</comment>
   <comment type="line" pos:line="144" pos:column="4">// create an extra copy.</comment>
   <decl_stmt><decl><type><name><name pos:line="145" pos:column="4">std</name><op:operator pos:line="145" pos:column="7">::</op:operator><name pos:line="145" pos:column="9">string</name></name></type> <name pos:line="145" pos:column="16">doc</name></decl>;</decl_stmt>
   <expr_stmt><expr><call><name><name pos:line="146" pos:column="4">std</name><op:operator pos:line="146" pos:column="7">::</op:operator><name pos:line="146" pos:column="9">getline</name></name><argument_list pos:line="146" pos:column="16">(<argument><expr><name pos:line="146" pos:column="17">sin</name></expr></argument>, <argument><expr><name pos:line="146" pos:column="22">doc</name></expr></argument>, <argument><expr><op:operator pos:line="146" pos:column="27">(</op:operator><name pos:line="146" pos:column="28">char</name><op:operator pos:line="146" pos:column="32">)</op:operator><name pos:line="146" pos:column="33">EOF</name></expr></argument>)</argument_list></call></expr>;</expr_stmt>
   <return pos:line="147" pos:column="4">return <expr><call><name pos:line="147" pos:column="11">parse</name><argument_list pos:line="147" pos:column="16">( <argument><expr><name pos:line="147" pos:column="18">doc</name></expr></argument>, <argument><expr><name pos:line="147" pos:column="23">root</name></expr></argument>, <argument><expr><name pos:line="147" pos:column="29">collectComments</name></expr></argument> )</argument_list></call></expr>;</return>
}</block></function>

<function><type><name pos:line="150" pos:column="1">bool</name></type> 
<name><name pos:line="151" pos:column="1">Reader</name><op:operator pos:line="151" pos:column="7">::</op:operator><name pos:line="151" pos:column="9">parse</name></name><parameter_list pos:line="151" pos:column="14">( <param><decl><type><name pos:line="151" pos:column="16">const</name> <name pos:line="151" pos:column="22">char</name> <type:modifier pos:line="151" pos:column="27">*</type:modifier></type><name pos:line="151" pos:column="28">beginDoc</name></decl></param>, <param><decl><type><name pos:line="151" pos:column="38">const</name> <name pos:line="151" pos:column="44">char</name> <type:modifier pos:line="151" pos:column="49">*</type:modifier></type><name pos:line="151" pos:column="50">endDoc</name></decl></param>, 
               <param><decl><type><name pos:line="152" pos:column="16">Value</name> <type:modifier pos:line="152" pos:column="22">&amp;</type:modifier></type><name pos:line="152" pos:column="23">root</name></decl></param>,
               <param><decl><type><name pos:line="153" pos:column="16">bool</name></type> <name pos:line="153" pos:column="21">collectComments</name></decl></param> )</parameter_list>
<block pos:line="154" pos:column="1">{
   <if pos:line="155" pos:column="4">if <condition pos:line="155" pos:column="7">( <expr><op:operator pos:line="155" pos:column="9">!</op:operator><name pos:line="155" pos:column="10">features_</name><op:operator pos:line="155" pos:column="19">.</op:operator><name pos:line="155" pos:column="20">allowComments_</name></expr> )</condition><then pos:line="155" pos:column="36">
   <block pos:line="156" pos:column="4">{
      <expr_stmt><expr><name pos:line="157" pos:column="7">collectComments</name> <op:operator pos:line="157" pos:column="23">=</op:operator> <lit:literal type="boolean" pos:line="157" pos:column="25">false</lit:literal></expr>;</expr_stmt>
   }</block></then></if>

   <expr_stmt><expr><name pos:line="160" pos:column="4">begin_</name> <op:operator pos:line="160" pos:column="11">=</op:operator> <name pos:line="160" pos:column="13">beginDoc</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="161" pos:column="4">end_</name> <op:operator pos:line="161" pos:column="9">=</op:operator> <name pos:line="161" pos:column="11">endDoc</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="162" pos:column="4">collectComments_</name> <op:operator pos:line="162" pos:column="21">=</op:operator> <name pos:line="162" pos:column="23">collectComments</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="163" pos:column="4">current_</name> <op:operator pos:line="163" pos:column="13">=</op:operator> <name pos:line="163" pos:column="15">begin_</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="164" pos:column="4">lastValueEnd_</name> <op:operator pos:line="164" pos:column="18">=</op:operator> <lit:literal type="number" pos:line="164" pos:column="20">0</lit:literal></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="165" pos:column="4">lastValue_</name> <op:operator pos:line="165" pos:column="15">=</op:operator> <lit:literal type="number" pos:line="165" pos:column="17">0</lit:literal></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="166" pos:column="4">commentsBefore_</name> <op:operator pos:line="166" pos:column="20">=</op:operator> <lit:literal type="string" pos:line="166" pos:column="22">""</lit:literal></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="167" pos:column="4">errors_</name><op:operator pos:line="167" pos:column="11">.</op:operator><call><name pos:line="167" pos:column="12">clear</name><argument_list pos:line="167" pos:column="17">()</argument_list></call></expr>;</expr_stmt>
   <while pos:line="168" pos:column="4">while <condition pos:line="168" pos:column="10">( <expr><op:operator pos:line="168" pos:column="12">!</op:operator><name pos:line="168" pos:column="13">nodes_</name><op:operator pos:line="168" pos:column="19">.</op:operator><call><name pos:line="168" pos:column="20">empty</name><argument_list pos:line="168" pos:column="25">()</argument_list></call></expr> )</condition>
      <expr_stmt><expr><name pos:line="169" pos:column="7">nodes_</name><op:operator pos:line="169" pos:column="13">.</op:operator><call><name pos:line="169" pos:column="14">pop</name><argument_list pos:line="169" pos:column="17">()</argument_list></call></expr>;</expr_stmt></while>
   <expr_stmt><expr><name pos:line="170" pos:column="4">nodes_</name><op:operator pos:line="170" pos:column="10">.</op:operator><call><name pos:line="170" pos:column="11">push</name><argument_list pos:line="170" pos:column="15">( <argument><expr><op:operator pos:line="170" pos:column="17">&amp;</op:operator><name pos:line="170" pos:column="18">root</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   
   <decl_stmt><decl><type><name pos:line="172" pos:column="4">bool</name></type> <name pos:line="172" pos:column="9">successful</name> =<init pos:line="172" pos:column="21"> <expr><call><name pos:line="172" pos:column="22">readValue</name><argument_list pos:line="172" pos:column="31">()</argument_list></call></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="173" pos:column="4">Token</name></type> <name pos:line="173" pos:column="10">token</name></decl>;</decl_stmt>
   <expr_stmt><expr><call><name pos:line="174" pos:column="4">skipCommentTokens</name><argument_list pos:line="174" pos:column="21">( <argument><expr><name pos:line="174" pos:column="23">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <if pos:line="175" pos:column="4">if <condition pos:line="175" pos:column="7">( <expr><name pos:line="175" pos:column="9">collectComments_</name>  <op:operator pos:line="175" pos:column="27">&amp;&amp;</op:operator>  <op:operator pos:line="175" pos:column="31">!</op:operator><name pos:line="175" pos:column="32">commentsBefore_</name><op:operator pos:line="175" pos:column="47">.</op:operator><call><name pos:line="175" pos:column="48">empty</name><argument_list pos:line="175" pos:column="53">()</argument_list></call></expr> )</condition><then pos:line="175" pos:column="57">
      <expr_stmt><expr><name pos:line="176" pos:column="7">root</name><op:operator pos:line="176" pos:column="11">.</op:operator><call><name pos:line="176" pos:column="12">setComment</name><argument_list pos:line="176" pos:column="22">( <argument><expr><name pos:line="176" pos:column="24">commentsBefore_</name></expr></argument>, <argument><expr><name pos:line="176" pos:column="41">commentAfter</name></expr></argument> )</argument_list></call></expr>;</expr_stmt></then></if>
   <if pos:line="177" pos:column="4">if <condition pos:line="177" pos:column="7">( <expr><name pos:line="177" pos:column="9">features_</name><op:operator pos:line="177" pos:column="18">.</op:operator><name pos:line="177" pos:column="19">strictRoot_</name></expr> )</condition><then pos:line="177" pos:column="32">
   <block pos:line="178" pos:column="4">{
      <if pos:line="179" pos:column="7">if <condition pos:line="179" pos:column="10">( <expr><op:operator pos:line="179" pos:column="12">!</op:operator><name pos:line="179" pos:column="13">root</name><op:operator pos:line="179" pos:column="17">.</op:operator><call><name pos:line="179" pos:column="18">isArray</name><argument_list pos:line="179" pos:column="25">()</argument_list></call>  <op:operator pos:line="179" pos:column="29">&amp;&amp;</op:operator>  <op:operator pos:line="179" pos:column="33">!</op:operator><name pos:line="179" pos:column="34">root</name><op:operator pos:line="179" pos:column="38">.</op:operator><call><name pos:line="179" pos:column="39">isObject</name><argument_list pos:line="179" pos:column="47">()</argument_list></call></expr> )</condition><then pos:line="179" pos:column="51">
      <block pos:line="180" pos:column="7">{
         <comment type="line" pos:line="181" pos:column="10">// Set error location to start of doc, ideally should be first token found in doc</comment>
         <expr_stmt><expr><name pos:line="182" pos:column="10">token</name><op:operator pos:line="182" pos:column="15">.</op:operator><name pos:line="182" pos:column="16">type_</name> <op:operator pos:line="182" pos:column="22">=</op:operator> <name pos:line="182" pos:column="24">tokenError</name></expr>;</expr_stmt>
         <expr_stmt><expr><name pos:line="183" pos:column="10">token</name><op:operator pos:line="183" pos:column="15">.</op:operator><name pos:line="183" pos:column="16">start_</name> <op:operator pos:line="183" pos:column="23">=</op:operator> <name pos:line="183" pos:column="25">beginDoc</name></expr>;</expr_stmt>
         <expr_stmt><expr><name pos:line="184" pos:column="10">token</name><op:operator pos:line="184" pos:column="15">.</op:operator><name pos:line="184" pos:column="16">end_</name> <op:operator pos:line="184" pos:column="21">=</op:operator> <name pos:line="184" pos:column="23">endDoc</name></expr>;</expr_stmt>
         <expr_stmt><expr><call><name pos:line="185" pos:column="10">addError</name><argument_list pos:line="185" pos:column="18">( <argument><expr><lit:literal type="string" pos:line="185" pos:column="20">"A valid JSON document must be either an array or an object value."</lit:literal></expr></argument>,
                   <argument><expr><name pos:line="186" pos:column="20">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
         <return pos:line="187" pos:column="10">return <expr><lit:literal type="boolean" pos:line="187" pos:column="17">false</lit:literal></expr>;</return>
      }</block></then></if>
   }</block></then></if>
   <return pos:line="190" pos:column="4">return <expr><name pos:line="190" pos:column="11">successful</name></expr>;</return>
}</block></function>


<function><type><name pos:line="194" pos:column="1">bool</name></type>
<name><name pos:line="195" pos:column="1">Reader</name><op:operator pos:line="195" pos:column="7">::</op:operator><name pos:line="195" pos:column="9">readValue</name></name><parameter_list pos:line="195" pos:column="18">()</parameter_list>
<block pos:line="196" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="197" pos:column="4">Token</name></type> <name pos:line="197" pos:column="10">token</name></decl>;</decl_stmt>
   <expr_stmt><expr><call><name pos:line="198" pos:column="4">skipCommentTokens</name><argument_list pos:line="198" pos:column="21">( <argument><expr><name pos:line="198" pos:column="23">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <decl_stmt><decl><type><name pos:line="199" pos:column="4">bool</name></type> <name pos:line="199" pos:column="9">successful</name> =<init pos:line="199" pos:column="21"> <expr><lit:literal type="boolean" pos:line="199" pos:column="22">true</lit:literal></expr></init></decl>;</decl_stmt>

   <if pos:line="201" pos:column="4">if <condition pos:line="201" pos:column="7">( <expr><name pos:line="201" pos:column="9">collectComments_</name>  <op:operator pos:line="201" pos:column="27">&amp;&amp;</op:operator>  <op:operator pos:line="201" pos:column="31">!</op:operator><name pos:line="201" pos:column="32">commentsBefore_</name><op:operator pos:line="201" pos:column="47">.</op:operator><call><name pos:line="201" pos:column="48">empty</name><argument_list pos:line="201" pos:column="53">()</argument_list></call></expr> )</condition><then pos:line="201" pos:column="57">
   <block pos:line="202" pos:column="4">{
      <expr_stmt><expr><call><name pos:line="203" pos:column="7">currentValue</name><argument_list pos:line="203" pos:column="19">()</argument_list></call><op:operator pos:line="203" pos:column="21">.</op:operator><call><name pos:line="203" pos:column="22">setComment</name><argument_list pos:line="203" pos:column="32">( <argument><expr><name pos:line="203" pos:column="34">commentsBefore_</name></expr></argument>, <argument><expr><name pos:line="203" pos:column="51">commentBefore</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="204" pos:column="7">commentsBefore_</name> <op:operator pos:line="204" pos:column="23">=</op:operator> <lit:literal type="string" pos:line="204" pos:column="25">""</lit:literal></expr>;</expr_stmt>
   }</block></then></if>


   <switch pos:line="208" pos:column="4">switch <condition pos:line="208" pos:column="11">( <expr><name pos:line="208" pos:column="13">token</name><op:operator pos:line="208" pos:column="18">.</op:operator><name pos:line="208" pos:column="19">type_</name></expr> )</condition>
   <block pos:line="209" pos:column="4">{
   <case pos:line="210" pos:column="4">case <expr><name pos:line="210" pos:column="9">tokenObjectBegin</name></expr>:
      <expr_stmt><expr><name pos:line="211" pos:column="7">successful</name> <op:operator pos:line="211" pos:column="18">=</op:operator> <call><name pos:line="211" pos:column="20">readObject</name><argument_list pos:line="211" pos:column="30">( <argument><expr><name pos:line="211" pos:column="32">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="212" pos:column="7">break;</break>
   </case><case pos:line="213" pos:column="4">case <expr><name pos:line="213" pos:column="9">tokenArrayBegin</name></expr>:
      <expr_stmt><expr><name pos:line="214" pos:column="7">successful</name> <op:operator pos:line="214" pos:column="18">=</op:operator> <call><name pos:line="214" pos:column="20">readArray</name><argument_list pos:line="214" pos:column="29">( <argument><expr><name pos:line="214" pos:column="31">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="215" pos:column="7">break;</break>
   </case><case pos:line="216" pos:column="4">case <expr><name pos:line="216" pos:column="9">tokenNumber</name></expr>:
      <expr_stmt><expr><name pos:line="217" pos:column="7">successful</name> <op:operator pos:line="217" pos:column="18">=</op:operator> <call><name pos:line="217" pos:column="20">decodeNumber</name><argument_list pos:line="217" pos:column="32">( <argument><expr><name pos:line="217" pos:column="34">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="218" pos:column="7">break;</break>
   </case><case pos:line="219" pos:column="4">case <expr><name pos:line="219" pos:column="9">tokenString</name></expr>:
      <expr_stmt><expr><name pos:line="220" pos:column="7">successful</name> <op:operator pos:line="220" pos:column="18">=</op:operator> <call><name pos:line="220" pos:column="20">decodeString</name><argument_list pos:line="220" pos:column="32">( <argument><expr><name pos:line="220" pos:column="34">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="221" pos:column="7">break;</break>
   </case><case pos:line="222" pos:column="4">case <expr><name pos:line="222" pos:column="9">tokenTrue</name></expr>:
      <expr_stmt><expr><call><name pos:line="223" pos:column="7">currentValue</name><argument_list pos:line="223" pos:column="19">()</argument_list></call> <op:operator pos:line="223" pos:column="22">=</op:operator> <lit:literal type="boolean" pos:line="223" pos:column="24">true</lit:literal></expr>;</expr_stmt>
      <break pos:line="224" pos:column="7">break;</break>
   </case><case pos:line="225" pos:column="4">case <expr><name pos:line="225" pos:column="9">tokenFalse</name></expr>:
      <expr_stmt><expr><call><name pos:line="226" pos:column="7">currentValue</name><argument_list pos:line="226" pos:column="19">()</argument_list></call> <op:operator pos:line="226" pos:column="22">=</op:operator> <lit:literal type="boolean" pos:line="226" pos:column="24">false</lit:literal></expr>;</expr_stmt>
      <break pos:line="227" pos:column="7">break;</break>
   </case><case pos:line="228" pos:column="4">case <expr><name pos:line="228" pos:column="9">tokenNull</name></expr>:
      <expr_stmt><expr><call><name pos:line="229" pos:column="7">currentValue</name><argument_list pos:line="229" pos:column="19">()</argument_list></call> <op:operator pos:line="229" pos:column="22">=</op:operator> <call><name pos:line="229" pos:column="24">Value</name><argument_list pos:line="229" pos:column="29">()</argument_list></call></expr>;</expr_stmt>
      <break pos:line="230" pos:column="7">break;</break>
   </case><default pos:line="231" pos:column="4">default:
      <return pos:line="232" pos:column="7">return <expr><call><name pos:line="232" pos:column="14">addError</name><argument_list pos:line="232" pos:column="22">( <argument><expr><lit:literal type="string" pos:line="232" pos:column="24">"Syntax error: value, object or array expected."</lit:literal></expr></argument>, <argument><expr><name pos:line="232" pos:column="74">token</name></expr></argument> )</argument_list></call></expr>;</return>
   </default>}</block></switch>

   <if pos:line="235" pos:column="4">if <condition pos:line="235" pos:column="7">( <expr><name pos:line="235" pos:column="9">collectComments_</name></expr> )</condition><then pos:line="235" pos:column="27">
   <block pos:line="236" pos:column="4">{
      <expr_stmt><expr><name pos:line="237" pos:column="7">lastValueEnd_</name> <op:operator pos:line="237" pos:column="21">=</op:operator> <name pos:line="237" pos:column="23">current_</name></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="238" pos:column="7">lastValue_</name> <op:operator pos:line="238" pos:column="18">=</op:operator> <op:operator pos:line="238" pos:column="20">&amp;</op:operator><call><name pos:line="238" pos:column="21">currentValue</name><argument_list pos:line="238" pos:column="33">()</argument_list></call></expr>;</expr_stmt>
   }</block></then></if>

   <return pos:line="241" pos:column="4">return <expr><name pos:line="241" pos:column="11">successful</name></expr>;</return>
}</block></function>


<function><type><name pos:line="245" pos:column="1">void</name></type> 
<name><name pos:line="246" pos:column="1">Reader</name><op:operator pos:line="246" pos:column="7">::</op:operator><name pos:line="246" pos:column="9">skipCommentTokens</name></name><parameter_list pos:line="246" pos:column="26">( <param><decl><type><name pos:line="246" pos:column="28">Token</name> <type:modifier pos:line="246" pos:column="34">&amp;</type:modifier></type><name pos:line="246" pos:column="35">token</name></decl></param> )</parameter_list>
<block pos:line="247" pos:column="1">{
   <if pos:line="248" pos:column="4">if <condition pos:line="248" pos:column="7">( <expr><name pos:line="248" pos:column="9">features_</name><op:operator pos:line="248" pos:column="18">.</op:operator><name pos:line="248" pos:column="19">allowComments_</name></expr> )</condition><then pos:line="248" pos:column="35">
   <block pos:line="249" pos:column="4">{
      <do pos:line="250" pos:column="7">do
      <block pos:line="251" pos:column="7">{
         <expr_stmt><expr><call><name pos:line="252" pos:column="10">readToken</name><argument_list pos:line="252" pos:column="19">( <argument><expr><name pos:line="252" pos:column="21">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      }</block>
      while <condition pos:line="254" pos:column="13">( <expr><name pos:line="254" pos:column="15">token</name><op:operator pos:line="254" pos:column="20">.</op:operator><name pos:line="254" pos:column="21">type_</name> <op:operator pos:line="254" pos:column="27">==</op:operator> <name pos:line="254" pos:column="30">tokenComment</name></expr> )</condition>;</do>
   }</block></then>
   <else pos:line="256" pos:column="4">else
   <block pos:line="257" pos:column="4">{
      <expr_stmt><expr><call><name pos:line="258" pos:column="7">readToken</name><argument_list pos:line="258" pos:column="16">( <argument><expr><name pos:line="258" pos:column="18">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   }</block></else></if>
}</block></function>


<function><type><name pos:line="263" pos:column="1">bool</name></type> 
<name><name pos:line="264" pos:column="1">Reader</name><op:operator pos:line="264" pos:column="7">::</op:operator><name pos:line="264" pos:column="9">expectToken</name></name><parameter_list pos:line="264" pos:column="20">( <param><decl><type><name pos:line="264" pos:column="22">TokenType</name></type> <name pos:line="264" pos:column="32">type</name></decl></param>, <param><decl><type><name pos:line="264" pos:column="38">Token</name> <type:modifier pos:line="264" pos:column="44">&amp;</type:modifier></type><name pos:line="264" pos:column="45">token</name></decl></param>, <param><decl><type><name pos:line="264" pos:column="52">const</name> <name pos:line="264" pos:column="58">char</name> <type:modifier pos:line="264" pos:column="63">*</type:modifier></type><name pos:line="264" pos:column="64">message</name></decl></param> )</parameter_list>
<block pos:line="265" pos:column="1">{
   <expr_stmt><expr><call><name pos:line="266" pos:column="4">readToken</name><argument_list pos:line="266" pos:column="13">( <argument><expr><name pos:line="266" pos:column="15">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <if pos:line="267" pos:column="4">if <condition pos:line="267" pos:column="7">( <expr><name pos:line="267" pos:column="9">token</name><op:operator pos:line="267" pos:column="14">.</op:operator><name pos:line="267" pos:column="15">type_</name> <op:operator pos:line="267" pos:column="21">!=</op:operator> <name pos:line="267" pos:column="24">type</name></expr> )</condition><then pos:line="267" pos:column="30">
      <return pos:line="268" pos:column="7">return <expr><call><name pos:line="268" pos:column="14">addError</name><argument_list pos:line="268" pos:column="22">( <argument><expr><name pos:line="268" pos:column="24">message</name></expr></argument>, <argument><expr><name pos:line="268" pos:column="33">token</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
   <return pos:line="269" pos:column="4">return <expr><lit:literal type="boolean" pos:line="269" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="273" pos:column="1">bool</name></type> 
<name><name pos:line="274" pos:column="1">Reader</name><op:operator pos:line="274" pos:column="7">::</op:operator><name pos:line="274" pos:column="9">readToken</name></name><parameter_list pos:line="274" pos:column="18">( <param><decl><type><name pos:line="274" pos:column="20">Token</name> <type:modifier pos:line="274" pos:column="26">&amp;</type:modifier></type><name pos:line="274" pos:column="27">token</name></decl></param> )</parameter_list>
<block pos:line="275" pos:column="1">{
   <expr_stmt><expr><call><name pos:line="276" pos:column="4">skipSpaces</name><argument_list pos:line="276" pos:column="14">()</argument_list></call></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="277" pos:column="4">token</name><op:operator pos:line="277" pos:column="9">.</op:operator><name pos:line="277" pos:column="10">start_</name> <op:operator pos:line="277" pos:column="17">=</op:operator> <name pos:line="277" pos:column="19">current_</name></expr>;</expr_stmt>
   <decl_stmt><decl><type><name pos:line="278" pos:column="4">Char</name></type> <name pos:line="278" pos:column="9">c</name> =<init pos:line="278" pos:column="12"> <expr><call><name pos:line="278" pos:column="13">getNextChar</name><argument_list pos:line="278" pos:column="24">()</argument_list></call></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="279" pos:column="4">bool</name></type> <name pos:line="279" pos:column="9">ok</name> =<init pos:line="279" pos:column="13"> <expr><lit:literal type="boolean" pos:line="279" pos:column="14">true</lit:literal></expr></init></decl>;</decl_stmt>
   <switch pos:line="280" pos:column="4">switch <condition pos:line="280" pos:column="11">( <expr><name pos:line="280" pos:column="13">c</name></expr> )</condition>
   <block pos:line="281" pos:column="4">{
   <case pos:line="282" pos:column="4">case <expr><lit:literal type="char" pos:line="282" pos:column="9">'{'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="283" pos:column="7">token</name><op:operator pos:line="283" pos:column="12">.</op:operator><name pos:line="283" pos:column="13">type_</name> <op:operator pos:line="283" pos:column="19">=</op:operator> <name pos:line="283" pos:column="21">tokenObjectBegin</name></expr>;</expr_stmt>
      <break pos:line="284" pos:column="7">break;</break>
   </case><case pos:line="285" pos:column="4">case <expr><lit:literal type="char" pos:line="285" pos:column="9">'}'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="286" pos:column="7">token</name><op:operator pos:line="286" pos:column="12">.</op:operator><name pos:line="286" pos:column="13">type_</name> <op:operator pos:line="286" pos:column="19">=</op:operator> <name pos:line="286" pos:column="21">tokenObjectEnd</name></expr>;</expr_stmt>
      <break pos:line="287" pos:column="7">break;</break>
   </case><case pos:line="288" pos:column="4">case <expr><lit:literal type="char" pos:line="288" pos:column="9">'['</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="289" pos:column="7">token</name><op:operator pos:line="289" pos:column="12">.</op:operator><name pos:line="289" pos:column="13">type_</name> <op:operator pos:line="289" pos:column="19">=</op:operator> <name pos:line="289" pos:column="21">tokenArrayBegin</name></expr>;</expr_stmt>
      <break pos:line="290" pos:column="7">break;</break>
   </case><case pos:line="291" pos:column="4">case <expr><lit:literal type="char" pos:line="291" pos:column="9">']'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="292" pos:column="7">token</name><op:operator pos:line="292" pos:column="12">.</op:operator><name pos:line="292" pos:column="13">type_</name> <op:operator pos:line="292" pos:column="19">=</op:operator> <name pos:line="292" pos:column="21">tokenArrayEnd</name></expr>;</expr_stmt>
      <break pos:line="293" pos:column="7">break;</break>
   </case><case pos:line="294" pos:column="4">case <expr><lit:literal type="char" pos:line="294" pos:column="9">'"'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="295" pos:column="7">token</name><op:operator pos:line="295" pos:column="12">.</op:operator><name pos:line="295" pos:column="13">type_</name> <op:operator pos:line="295" pos:column="19">=</op:operator> <name pos:line="295" pos:column="21">tokenString</name></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="296" pos:column="7">ok</name> <op:operator pos:line="296" pos:column="10">=</op:operator> <call><name pos:line="296" pos:column="12">readString</name><argument_list pos:line="296" pos:column="22">()</argument_list></call></expr>;</expr_stmt>
      <break pos:line="297" pos:column="7">break;</break>
   </case><case pos:line="298" pos:column="4">case <expr><lit:literal type="char" pos:line="298" pos:column="9">'/'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="299" pos:column="7">token</name><op:operator pos:line="299" pos:column="12">.</op:operator><name pos:line="299" pos:column="13">type_</name> <op:operator pos:line="299" pos:column="19">=</op:operator> <name pos:line="299" pos:column="21">tokenComment</name></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="300" pos:column="7">ok</name> <op:operator pos:line="300" pos:column="10">=</op:operator> <call><name pos:line="300" pos:column="12">readComment</name><argument_list pos:line="300" pos:column="23">()</argument_list></call></expr>;</expr_stmt>
      <break pos:line="301" pos:column="7">break;</break>
   </case><case pos:line="302" pos:column="4">case <expr><lit:literal type="char" pos:line="302" pos:column="9">'0'</lit:literal></expr>:
   </case><case pos:line="303" pos:column="4">case <expr><lit:literal type="char" pos:line="303" pos:column="9">'1'</lit:literal></expr>:
   </case><case pos:line="304" pos:column="4">case <expr><lit:literal type="char" pos:line="304" pos:column="9">'2'</lit:literal></expr>:
   </case><case pos:line="305" pos:column="4">case <expr><lit:literal type="char" pos:line="305" pos:column="9">'3'</lit:literal></expr>:
   </case><case pos:line="306" pos:column="4">case <expr><lit:literal type="char" pos:line="306" pos:column="9">'4'</lit:literal></expr>:
   </case><case pos:line="307" pos:column="4">case <expr><lit:literal type="char" pos:line="307" pos:column="9">'5'</lit:literal></expr>:
   </case><case pos:line="308" pos:column="4">case <expr><lit:literal type="char" pos:line="308" pos:column="9">'6'</lit:literal></expr>:
   </case><case pos:line="309" pos:column="4">case <expr><lit:literal type="char" pos:line="309" pos:column="9">'7'</lit:literal></expr>:
   </case><case pos:line="310" pos:column="4">case <expr><lit:literal type="char" pos:line="310" pos:column="9">'8'</lit:literal></expr>:
   </case><case pos:line="311" pos:column="4">case <expr><lit:literal type="char" pos:line="311" pos:column="9">'9'</lit:literal></expr>:
   </case><case pos:line="312" pos:column="4">case <expr><lit:literal type="char" pos:line="312" pos:column="9">'-'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="313" pos:column="7">token</name><op:operator pos:line="313" pos:column="12">.</op:operator><name pos:line="313" pos:column="13">type_</name> <op:operator pos:line="313" pos:column="19">=</op:operator> <name pos:line="313" pos:column="21">tokenNumber</name></expr>;</expr_stmt>
      <expr_stmt><expr><call><name pos:line="314" pos:column="7">readNumber</name><argument_list pos:line="314" pos:column="17">()</argument_list></call></expr>;</expr_stmt>
      <break pos:line="315" pos:column="7">break;</break>
   </case><case pos:line="316" pos:column="4">case <expr><lit:literal type="char" pos:line="316" pos:column="9">'t'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="317" pos:column="7">token</name><op:operator pos:line="317" pos:column="12">.</op:operator><name pos:line="317" pos:column="13">type_</name> <op:operator pos:line="317" pos:column="19">=</op:operator> <name pos:line="317" pos:column="21">tokenTrue</name></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="318" pos:column="7">ok</name> <op:operator pos:line="318" pos:column="10">=</op:operator> <call><name pos:line="318" pos:column="12">match</name><argument_list pos:line="318" pos:column="17">( <argument><expr><lit:literal type="string" pos:line="318" pos:column="19">"rue"</lit:literal></expr></argument>, <argument><expr><lit:literal type="number" pos:line="318" pos:column="26">3</lit:literal></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="319" pos:column="7">break;</break>
   </case><case pos:line="320" pos:column="4">case <expr><lit:literal type="char" pos:line="320" pos:column="9">'f'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="321" pos:column="7">token</name><op:operator pos:line="321" pos:column="12">.</op:operator><name pos:line="321" pos:column="13">type_</name> <op:operator pos:line="321" pos:column="19">=</op:operator> <name pos:line="321" pos:column="21">tokenFalse</name></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="322" pos:column="7">ok</name> <op:operator pos:line="322" pos:column="10">=</op:operator> <call><name pos:line="322" pos:column="12">match</name><argument_list pos:line="322" pos:column="17">( <argument><expr><lit:literal type="string" pos:line="322" pos:column="19">"alse"</lit:literal></expr></argument>, <argument><expr><lit:literal type="number" pos:line="322" pos:column="27">4</lit:literal></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="323" pos:column="7">break;</break>
   </case><case pos:line="324" pos:column="4">case <expr><lit:literal type="char" pos:line="324" pos:column="9">'n'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="325" pos:column="7">token</name><op:operator pos:line="325" pos:column="12">.</op:operator><name pos:line="325" pos:column="13">type_</name> <op:operator pos:line="325" pos:column="19">=</op:operator> <name pos:line="325" pos:column="21">tokenNull</name></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="326" pos:column="7">ok</name> <op:operator pos:line="326" pos:column="10">=</op:operator> <call><name pos:line="326" pos:column="12">match</name><argument_list pos:line="326" pos:column="17">( <argument><expr><lit:literal type="string" pos:line="326" pos:column="19">"ull"</lit:literal></expr></argument>, <argument><expr><lit:literal type="number" pos:line="326" pos:column="26">3</lit:literal></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <break pos:line="327" pos:column="7">break;</break>
   </case><case pos:line="328" pos:column="4">case <expr><lit:literal type="char" pos:line="328" pos:column="9">','</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="329" pos:column="7">token</name><op:operator pos:line="329" pos:column="12">.</op:operator><name pos:line="329" pos:column="13">type_</name> <op:operator pos:line="329" pos:column="19">=</op:operator> <name pos:line="329" pos:column="21">tokenArraySeparator</name></expr>;</expr_stmt>
      <break pos:line="330" pos:column="7">break;</break>
   </case><case pos:line="331" pos:column="4">case <expr><lit:literal type="char" pos:line="331" pos:column="9">':'</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="332" pos:column="7">token</name><op:operator pos:line="332" pos:column="12">.</op:operator><name pos:line="332" pos:column="13">type_</name> <op:operator pos:line="332" pos:column="19">=</op:operator> <name pos:line="332" pos:column="21">tokenMemberSeparator</name></expr>;</expr_stmt>
      <break pos:line="333" pos:column="7">break;</break>
   </case><case pos:line="334" pos:column="4">case <expr><lit:literal type="number" pos:line="334" pos:column="9">0</lit:literal></expr>:
      <expr_stmt><expr><name pos:line="335" pos:column="7">token</name><op:operator pos:line="335" pos:column="12">.</op:operator><name pos:line="335" pos:column="13">type_</name> <op:operator pos:line="335" pos:column="19">=</op:operator> <name pos:line="335" pos:column="21">tokenEndOfStream</name></expr>;</expr_stmt>
      <break pos:line="336" pos:column="7">break;</break>
   </case><default pos:line="337" pos:column="4">default:
      <expr_stmt><expr><name pos:line="338" pos:column="7">ok</name> <op:operator pos:line="338" pos:column="10">=</op:operator> <lit:literal type="boolean" pos:line="338" pos:column="12">false</lit:literal></expr>;</expr_stmt>
      <break pos:line="339" pos:column="7">break;</break>
   </default>}</block></switch>
   <if pos:line="341" pos:column="4">if <condition pos:line="341" pos:column="7">( <expr><op:operator pos:line="341" pos:column="9">!</op:operator><name pos:line="341" pos:column="10">ok</name></expr> )</condition><then pos:line="341" pos:column="14">
      <expr_stmt><expr><name pos:line="342" pos:column="7">token</name><op:operator pos:line="342" pos:column="12">.</op:operator><name pos:line="342" pos:column="13">type_</name> <op:operator pos:line="342" pos:column="19">=</op:operator> <name pos:line="342" pos:column="21">tokenError</name></expr>;</expr_stmt></then></if>
   <expr_stmt><expr><name pos:line="343" pos:column="4">token</name><op:operator pos:line="343" pos:column="9">.</op:operator><name pos:line="343" pos:column="10">end_</name> <op:operator pos:line="343" pos:column="15">=</op:operator> <name pos:line="343" pos:column="17">current_</name></expr>;</expr_stmt>
   <return pos:line="344" pos:column="4">return <expr><lit:literal type="boolean" pos:line="344" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="348" pos:column="1">void</name></type> 
<name><name pos:line="349" pos:column="1">Reader</name><op:operator pos:line="349" pos:column="7">::</op:operator><name pos:line="349" pos:column="9">skipSpaces</name></name><parameter_list pos:line="349" pos:column="19">()</parameter_list>
<block pos:line="350" pos:column="1">{
   <while pos:line="351" pos:column="4">while <condition pos:line="351" pos:column="10">( <expr><name pos:line="351" pos:column="12">current_</name> <op:operator pos:line="351" pos:column="21">!=</op:operator> <name pos:line="351" pos:column="24">end_</name></expr> )</condition>
   <block pos:line="352" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="353" pos:column="7">Char</name></type> <name pos:line="353" pos:column="12">c</name> =<init pos:line="353" pos:column="15"> <expr><op:operator pos:line="353" pos:column="16">*</op:operator><name pos:line="353" pos:column="17">current_</name></expr></init></decl>;</decl_stmt>
      <if pos:line="354" pos:column="7">if <condition pos:line="354" pos:column="10">( <expr><name pos:line="354" pos:column="12">c</name> <op:operator pos:line="354" pos:column="14">==</op:operator> <lit:literal type="char" pos:line="354" pos:column="17">' '</lit:literal>  <op:operator pos:line="354" pos:column="22">||</op:operator>  <name pos:line="354" pos:column="26">c</name> <op:operator pos:line="354" pos:column="28">==</op:operator> <lit:literal type="char" pos:line="354" pos:column="31">'\t'</lit:literal>  <op:operator pos:line="354" pos:column="37">||</op:operator>  <name pos:line="354" pos:column="41">c</name> <op:operator pos:line="354" pos:column="43">==</op:operator> <lit:literal type="char" pos:line="354" pos:column="46">'\r'</lit:literal>  <op:operator pos:line="354" pos:column="52">||</op:operator>  <name pos:line="354" pos:column="56">c</name> <op:operator pos:line="354" pos:column="58">==</op:operator> <lit:literal type="char" pos:line="354" pos:column="61">'\n'</lit:literal></expr> )</condition><then pos:line="354" pos:column="67">
         <expr_stmt><expr><op:operator pos:line="355" pos:column="10">++</op:operator><name pos:line="355" pos:column="12">current_</name></expr>;</expr_stmt></then>
      <else pos:line="356" pos:column="7">else
         <break pos:line="357" pos:column="10">break;</break></else></if>
   }</block></while>
}</block></function>


<function><type><name pos:line="362" pos:column="1">bool</name></type> 
<name><name pos:line="363" pos:column="1">Reader</name><op:operator pos:line="363" pos:column="7">::</op:operator><name pos:line="363" pos:column="9">match</name></name><parameter_list pos:line="363" pos:column="14">( <param><decl><type><name pos:line="363" pos:column="16">Location</name></type> <name pos:line="363" pos:column="25">pattern</name></decl></param>, 
               <param><decl><type><name pos:line="364" pos:column="16">int</name></type> <name pos:line="364" pos:column="20">patternLength</name></decl></param> )</parameter_list>
<block pos:line="365" pos:column="1">{
   <if pos:line="366" pos:column="4">if <condition pos:line="366" pos:column="7">( <expr><name pos:line="366" pos:column="9">end_</name> <op:operator pos:line="366" pos:column="14">-</op:operator> <name pos:line="366" pos:column="16">current_</name> <op:operator pos:line="366" pos:column="25">&lt;</op:operator> <name pos:line="366" pos:column="27">patternLength</name></expr> )</condition><then pos:line="366" pos:column="42">
      <return pos:line="367" pos:column="7">return <expr><lit:literal type="boolean" pos:line="367" pos:column="14">false</lit:literal></expr>;</return></then></if>
   <decl_stmt><decl><type><name pos:line="368" pos:column="4">int</name></type> <name pos:line="368" pos:column="8">index</name> =<init pos:line="368" pos:column="15"> <expr><name pos:line="368" pos:column="16">patternLength</name></expr></init></decl>;</decl_stmt>
   <while pos:line="369" pos:column="4">while <condition pos:line="369" pos:column="10">( <expr><name pos:line="369" pos:column="12">index</name><op:operator pos:line="369" pos:column="17">--</op:operator></expr> )</condition>
      <if pos:line="370" pos:column="7">if <condition pos:line="370" pos:column="10">( <expr><name><name pos:line="370" pos:column="12">current_</name><index pos:line="370" pos:column="20">[<expr><name pos:line="370" pos:column="21">index</name></expr>]</index></name> <op:operator pos:line="370" pos:column="28">!=</op:operator> <name><name pos:line="370" pos:column="31">pattern</name><index pos:line="370" pos:column="38">[<expr><name pos:line="370" pos:column="39">index</name></expr>]</index></name></expr> )</condition><then pos:line="370" pos:column="47">
         <return pos:line="371" pos:column="10">return <expr><lit:literal type="boolean" pos:line="371" pos:column="17">false</lit:literal></expr>;</return></then></if></while>
   <expr_stmt><expr><name pos:line="372" pos:column="4">current_</name> <op:operator pos:line="372" pos:column="13">+=</op:operator> <name pos:line="372" pos:column="16">patternLength</name></expr>;</expr_stmt>
   <return pos:line="373" pos:column="4">return <expr><lit:literal type="boolean" pos:line="373" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="377" pos:column="1">bool</name></type>
<name><name pos:line="378" pos:column="1">Reader</name><op:operator pos:line="378" pos:column="7">::</op:operator><name pos:line="378" pos:column="9">readComment</name></name><parameter_list pos:line="378" pos:column="20">()</parameter_list>
<block pos:line="379" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="380" pos:column="4">Location</name></type> <name pos:line="380" pos:column="13">commentBegin</name> =<init pos:line="380" pos:column="27"> <expr><name pos:line="380" pos:column="28">current_</name> <op:operator pos:line="380" pos:column="37">-</op:operator> <lit:literal type="number" pos:line="380" pos:column="39">1</lit:literal></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="381" pos:column="4">Char</name></type> <name pos:line="381" pos:column="9">c</name> =<init pos:line="381" pos:column="12"> <expr><call><name pos:line="381" pos:column="13">getNextChar</name><argument_list pos:line="381" pos:column="24">()</argument_list></call></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="382" pos:column="4">bool</name></type> <name pos:line="382" pos:column="9">successful</name> =<init pos:line="382" pos:column="21"> <expr><lit:literal type="boolean" pos:line="382" pos:column="22">false</lit:literal></expr></init></decl>;</decl_stmt>
   <if pos:line="383" pos:column="4">if <condition pos:line="383" pos:column="7">( <expr><name pos:line="383" pos:column="9">c</name> <op:operator pos:line="383" pos:column="11">==</op:operator> <lit:literal type="char" pos:line="383" pos:column="14">'*'</lit:literal></expr> )</condition><then pos:line="383" pos:column="19">
      <expr_stmt><expr><name pos:line="384" pos:column="7">successful</name> <op:operator pos:line="384" pos:column="18">=</op:operator> <call><name pos:line="384" pos:column="20">readCStyleComment</name><argument_list pos:line="384" pos:column="37">()</argument_list></call></expr>;</expr_stmt></then>
   <else pos:line="385" pos:column="4">else <if pos:line="385" pos:column="9">if <condition pos:line="385" pos:column="12">( <expr><name pos:line="385" pos:column="14">c</name> <op:operator pos:line="385" pos:column="16">==</op:operator> <lit:literal type="char" pos:line="385" pos:column="19">'/'</lit:literal></expr> )</condition><then pos:line="385" pos:column="24">
      <expr_stmt><expr><name pos:line="386" pos:column="7">successful</name> <op:operator pos:line="386" pos:column="18">=</op:operator> <call><name pos:line="386" pos:column="20">readCppStyleComment</name><argument_list pos:line="386" pos:column="39">()</argument_list></call></expr>;</expr_stmt></then></if></else></if>
   <if pos:line="387" pos:column="4">if <condition pos:line="387" pos:column="7">( <expr><op:operator pos:line="387" pos:column="9">!</op:operator><name pos:line="387" pos:column="10">successful</name></expr> )</condition><then pos:line="387" pos:column="22">
      <return pos:line="388" pos:column="7">return <expr><lit:literal type="boolean" pos:line="388" pos:column="14">false</lit:literal></expr>;</return></then></if>

   <if pos:line="390" pos:column="4">if <condition pos:line="390" pos:column="7">( <expr><name pos:line="390" pos:column="9">collectComments_</name></expr> )</condition><then pos:line="390" pos:column="27">
   <block pos:line="391" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="392" pos:column="7">CommentPlacement</name></type> <name pos:line="392" pos:column="24">placement</name> =<init pos:line="392" pos:column="35"> <expr><name pos:line="392" pos:column="36">commentBefore</name></expr></init></decl>;</decl_stmt>
      <if pos:line="393" pos:column="7">if <condition pos:line="393" pos:column="10">( <expr><name pos:line="393" pos:column="12">lastValueEnd_</name>  <op:operator pos:line="393" pos:column="27">&amp;&amp;</op:operator>  <op:operator pos:line="393" pos:column="31">!</op:operator><call><name pos:line="393" pos:column="32">containsNewLine</name><argument_list pos:line="393" pos:column="47">( <argument><expr><name pos:line="393" pos:column="49">lastValueEnd_</name></expr></argument>, <argument><expr><name pos:line="393" pos:column="64">commentBegin</name></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="393" pos:column="80">
      <block pos:line="394" pos:column="7">{
         <if pos:line="395" pos:column="10">if <condition pos:line="395" pos:column="13">( <expr><name pos:line="395" pos:column="15">c</name> <op:operator pos:line="395" pos:column="17">!=</op:operator> <lit:literal type="char" pos:line="395" pos:column="20">'*'</lit:literal>  <op:operator pos:line="395" pos:column="25">||</op:operator>  <op:operator pos:line="395" pos:column="29">!</op:operator><call><name pos:line="395" pos:column="30">containsNewLine</name><argument_list pos:line="395" pos:column="45">( <argument><expr><name pos:line="395" pos:column="47">commentBegin</name></expr></argument>, <argument><expr><name pos:line="395" pos:column="61">current_</name></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="395" pos:column="73">
            <expr_stmt><expr><name pos:line="396" pos:column="13">placement</name> <op:operator pos:line="396" pos:column="23">=</op:operator> <name pos:line="396" pos:column="25">commentAfterOnSameLine</name></expr>;</expr_stmt></then></if>
      }</block></then></if>

      <expr_stmt><expr><call><name pos:line="399" pos:column="7">addComment</name><argument_list pos:line="399" pos:column="17">( <argument><expr><name pos:line="399" pos:column="19">commentBegin</name></expr></argument>, <argument><expr><name pos:line="399" pos:column="33">current_</name></expr></argument>, <argument><expr><name pos:line="399" pos:column="43">placement</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   }</block></then></if>
   <return pos:line="401" pos:column="4">return <expr><lit:literal type="boolean" pos:line="401" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="405" pos:column="1">void</name></type> 
<name><name pos:line="406" pos:column="1">Reader</name><op:operator pos:line="406" pos:column="7">::</op:operator><name pos:line="406" pos:column="9">addComment</name></name><parameter_list pos:line="406" pos:column="19">( <param><decl><type><name pos:line="406" pos:column="21">Location</name></type> <name pos:line="406" pos:column="30">begin</name></decl></param>, 
                    <param><decl><type><name pos:line="407" pos:column="21">Location</name></type> <name pos:line="407" pos:column="30">end</name></decl></param>, 
                    <param><decl><type><name pos:line="408" pos:column="21">CommentPlacement</name></type> <name pos:line="408" pos:column="38">placement</name></decl></param> )</parameter_list>
<block pos:line="409" pos:column="1">{
   <expr_stmt><expr><call><name pos:line="410" pos:column="4">assert</name><argument_list pos:line="410" pos:column="10">( <argument><expr><name pos:line="410" pos:column="12">collectComments_</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <if pos:line="411" pos:column="4">if <condition pos:line="411" pos:column="7">( <expr><name pos:line="411" pos:column="9">placement</name> <op:operator pos:line="411" pos:column="19">==</op:operator> <name pos:line="411" pos:column="22">commentAfterOnSameLine</name></expr> )</condition><then pos:line="411" pos:column="46">
   <block pos:line="412" pos:column="4">{
      <expr_stmt><expr><call><name pos:line="413" pos:column="7">assert</name><argument_list pos:line="413" pos:column="13">( <argument><expr><name pos:line="413" pos:column="15">lastValue_</name> <op:operator pos:line="413" pos:column="26">!=</op:operator> <lit:literal type="number" pos:line="413" pos:column="29">0</lit:literal></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="414" pos:column="7">lastValue_</name><op:operator pos:line="414" pos:column="17">-&gt;</op:operator><call><name pos:line="414" pos:column="19">setComment</name><argument_list pos:line="414" pos:column="29">( <argument><expr><call><name><name pos:line="414" pos:column="31">std</name><op:operator pos:line="414" pos:column="34">::</op:operator><name pos:line="414" pos:column="36">string</name></name><argument_list pos:line="414" pos:column="42">( <argument><expr><name pos:line="414" pos:column="44">begin</name></expr></argument>, <argument><expr><name pos:line="414" pos:column="51">end</name></expr></argument> )</argument_list></call></expr></argument>, <argument><expr><name pos:line="414" pos:column="58">placement</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   }</block></then>
   <else pos:line="416" pos:column="4">else
   <block pos:line="417" pos:column="4">{
      <if pos:line="418" pos:column="7">if <condition pos:line="418" pos:column="10">( <expr><op:operator pos:line="418" pos:column="12">!</op:operator><name pos:line="418" pos:column="13">commentsBefore_</name><op:operator pos:line="418" pos:column="28">.</op:operator><call><name pos:line="418" pos:column="29">empty</name><argument_list pos:line="418" pos:column="34">()</argument_list></call></expr> )</condition><then pos:line="418" pos:column="38">
         <expr_stmt><expr><name pos:line="419" pos:column="10">commentsBefore_</name> <op:operator pos:line="419" pos:column="26">+=</op:operator> <lit:literal type="string" pos:line="419" pos:column="29">"\n"</lit:literal></expr>;</expr_stmt></then></if>
      <expr_stmt><expr><name pos:line="420" pos:column="7">commentsBefore_</name> <op:operator pos:line="420" pos:column="23">+=</op:operator> <call><name><name pos:line="420" pos:column="26">std</name><op:operator pos:line="420" pos:column="29">::</op:operator><name pos:line="420" pos:column="31">string</name></name><argument_list pos:line="420" pos:column="37">( <argument><expr><name pos:line="420" pos:column="39">begin</name></expr></argument>, <argument><expr><name pos:line="420" pos:column="46">end</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   }</block></else></if>
}</block></function>


<function><type><name pos:line="425" pos:column="1">bool</name></type> 
<name><name pos:line="426" pos:column="1">Reader</name><op:operator pos:line="426" pos:column="7">::</op:operator><name pos:line="426" pos:column="9">readCStyleComment</name></name><parameter_list pos:line="426" pos:column="26">()</parameter_list>
<block pos:line="427" pos:column="1">{
   <while pos:line="428" pos:column="4">while <condition pos:line="428" pos:column="10">( <expr><name pos:line="428" pos:column="12">current_</name> <op:operator pos:line="428" pos:column="21">!=</op:operator> <name pos:line="428" pos:column="24">end_</name></expr> )</condition>
   <block pos:line="429" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="430" pos:column="7">Char</name></type> <name pos:line="430" pos:column="12">c</name> =<init pos:line="430" pos:column="15"> <expr><call><name pos:line="430" pos:column="16">getNextChar</name><argument_list pos:line="430" pos:column="27">()</argument_list></call></expr></init></decl>;</decl_stmt>
      <if pos:line="431" pos:column="7">if <condition pos:line="431" pos:column="10">( <expr><name pos:line="431" pos:column="12">c</name> <op:operator pos:line="431" pos:column="14">==</op:operator> <lit:literal type="char" pos:line="431" pos:column="17">'*'</lit:literal>  <op:operator pos:line="431" pos:column="22">&amp;&amp;</op:operator>  <op:operator pos:line="431" pos:column="26">*</op:operator><name pos:line="431" pos:column="27">current_</name> <op:operator pos:line="431" pos:column="36">==</op:operator> <lit:literal type="char" pos:line="431" pos:column="39">'/'</lit:literal></expr> )</condition><then pos:line="431" pos:column="44">
         <break pos:line="432" pos:column="10">break;</break></then></if>
   }</block></while>
   <return pos:line="434" pos:column="4">return <expr><call><name pos:line="434" pos:column="11">getNextChar</name><argument_list pos:line="434" pos:column="22">()</argument_list></call> <op:operator pos:line="434" pos:column="25">==</op:operator> <lit:literal type="char" pos:line="434" pos:column="28">'/'</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="438" pos:column="1">bool</name></type> 
<name><name pos:line="439" pos:column="1">Reader</name><op:operator pos:line="439" pos:column="7">::</op:operator><name pos:line="439" pos:column="9">readCppStyleComment</name></name><parameter_list pos:line="439" pos:column="28">()</parameter_list>
<block pos:line="440" pos:column="1">{
   <while pos:line="441" pos:column="4">while <condition pos:line="441" pos:column="10">( <expr><name pos:line="441" pos:column="12">current_</name> <op:operator pos:line="441" pos:column="21">!=</op:operator> <name pos:line="441" pos:column="24">end_</name></expr> )</condition>
   <block pos:line="442" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="443" pos:column="7">Char</name></type> <name pos:line="443" pos:column="12">c</name> =<init pos:line="443" pos:column="15"> <expr><call><name pos:line="443" pos:column="16">getNextChar</name><argument_list pos:line="443" pos:column="27">()</argument_list></call></expr></init></decl>;</decl_stmt>
      <if pos:line="444" pos:column="7">if <condition pos:line="444" pos:column="10">(  <expr><name pos:line="444" pos:column="13">c</name> <op:operator pos:line="444" pos:column="15">==</op:operator> <lit:literal type="char" pos:line="444" pos:column="18">'\r'</lit:literal>  <op:operator pos:line="444" pos:column="24">||</op:operator>  <name pos:line="444" pos:column="28">c</name> <op:operator pos:line="444" pos:column="30">==</op:operator> <lit:literal type="char" pos:line="444" pos:column="33">'\n'</lit:literal></expr> )</condition><then pos:line="444" pos:column="39">
         <break pos:line="445" pos:column="10">break;</break></then></if>
   }</block></while>
   <return pos:line="447" pos:column="4">return <expr><lit:literal type="boolean" pos:line="447" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="451" pos:column="1">void</name></type> 
<name><name pos:line="452" pos:column="1">Reader</name><op:operator pos:line="452" pos:column="7">::</op:operator><name pos:line="452" pos:column="9">readNumber</name></name><parameter_list pos:line="452" pos:column="19">()</parameter_list>
<block pos:line="453" pos:column="1">{
   <while pos:line="454" pos:column="4">while <condition pos:line="454" pos:column="10">( <expr><name pos:line="454" pos:column="12">current_</name> <op:operator pos:line="454" pos:column="21">!=</op:operator> <name pos:line="454" pos:column="24">end_</name></expr> )</condition>
   <block pos:line="455" pos:column="4">{
      <if pos:line="456" pos:column="7">if <condition pos:line="456" pos:column="10">( <expr><op:operator pos:line="456" pos:column="12">!</op:operator><op:operator pos:line="456" pos:column="13">(</op:operator><op:operator pos:line="456" pos:column="14">*</op:operator><name pos:line="456" pos:column="15">current_</name> <op:operator pos:line="456" pos:column="24">&gt;=</op:operator> <lit:literal type="char" pos:line="456" pos:column="27">'0'</lit:literal>  <op:operator pos:line="456" pos:column="32">&amp;&amp;</op:operator>  <op:operator pos:line="456" pos:column="36">*</op:operator><name pos:line="456" pos:column="37">current_</name> <op:operator pos:line="456" pos:column="46">&lt;=</op:operator> <lit:literal type="char" pos:line="456" pos:column="49">'9'</lit:literal><op:operator pos:line="456" pos:column="52">)</op:operator>  <op:operator pos:line="456" pos:column="55">&amp;&amp;</op:operator>
           <op:operator pos:line="457" pos:column="12">!</op:operator><call><name pos:line="457" pos:column="13">in</name><argument_list pos:line="457" pos:column="15">( <argument><expr><op:operator pos:line="457" pos:column="17">*</op:operator><name pos:line="457" pos:column="18">current_</name></expr></argument>, <argument><expr><lit:literal type="char" pos:line="457" pos:column="28">'.'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="457" pos:column="33">'e'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="457" pos:column="38">'E'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="457" pos:column="43">'+'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="457" pos:column="48">'-'</lit:literal></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="457" pos:column="55">
         <break pos:line="458" pos:column="10">break;</break></then></if>
      <expr_stmt><expr><op:operator pos:line="459" pos:column="7">++</op:operator><name pos:line="459" pos:column="9">current_</name></expr>;</expr_stmt>
   }</block></while>
}</block></function>

<function><type><name pos:line="463" pos:column="1">bool</name></type>
<name><name pos:line="464" pos:column="1">Reader</name><op:operator pos:line="464" pos:column="7">::</op:operator><name pos:line="464" pos:column="9">readString</name></name><parameter_list pos:line="464" pos:column="19">()</parameter_list>
<block pos:line="465" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="466" pos:column="4">Char</name></type> <name pos:line="466" pos:column="9">c</name> =<init pos:line="466" pos:column="12"> <expr><lit:literal type="number" pos:line="466" pos:column="13">0</lit:literal></expr></init></decl>;</decl_stmt>
   <while pos:line="467" pos:column="4">while <condition pos:line="467" pos:column="10">( <expr><name pos:line="467" pos:column="12">current_</name> <op:operator pos:line="467" pos:column="21">!=</op:operator> <name pos:line="467" pos:column="24">end_</name></expr> )</condition>
   <block pos:line="468" pos:column="4">{
      <expr_stmt><expr><name pos:line="469" pos:column="7">c</name> <op:operator pos:line="469" pos:column="9">=</op:operator> <call><name pos:line="469" pos:column="11">getNextChar</name><argument_list pos:line="469" pos:column="22">()</argument_list></call></expr>;</expr_stmt>
      <if pos:line="470" pos:column="7">if <condition pos:line="470" pos:column="10">( <expr><name pos:line="470" pos:column="12">c</name> <op:operator pos:line="470" pos:column="14">==</op:operator> <lit:literal type="char" pos:line="470" pos:column="17">'\\'</lit:literal></expr> )</condition><then pos:line="470" pos:column="23">
         <expr_stmt><expr><call><name pos:line="471" pos:column="10">getNextChar</name><argument_list pos:line="471" pos:column="21">()</argument_list></call></expr>;</expr_stmt></then>
      <else pos:line="472" pos:column="7">else <if pos:line="472" pos:column="12">if <condition pos:line="472" pos:column="15">( <expr><name pos:line="472" pos:column="17">c</name> <op:operator pos:line="472" pos:column="19">==</op:operator> <lit:literal type="char" pos:line="472" pos:column="22">'"'</lit:literal></expr> )</condition><then pos:line="472" pos:column="27">
         <break pos:line="473" pos:column="10">break;</break></then></if></else></if>
   }</block></while>
   <return pos:line="475" pos:column="4">return <expr><name pos:line="475" pos:column="11">c</name> <op:operator pos:line="475" pos:column="13">==</op:operator> <lit:literal type="char" pos:line="475" pos:column="16">'"'</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="479" pos:column="1">bool</name></type> 
<name><name pos:line="480" pos:column="1">Reader</name><op:operator pos:line="480" pos:column="7">::</op:operator><name pos:line="480" pos:column="9">readObject</name></name><parameter_list pos:line="480" pos:column="19">( <param><decl><type><name pos:line="480" pos:column="21">Token</name> <type:modifier pos:line="480" pos:column="27">&amp;</type:modifier></type><name pos:line="480" pos:column="28">tokenStart</name></decl></param> )</parameter_list>
<block pos:line="481" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="482" pos:column="4">Token</name></type> <name pos:line="482" pos:column="10">tokenName</name></decl>;</decl_stmt>
   <decl_stmt><decl><type><name><name pos:line="483" pos:column="4">std</name><op:operator pos:line="483" pos:column="7">::</op:operator><name pos:line="483" pos:column="9">string</name></name></type> <name pos:line="483" pos:column="16">name</name></decl>;</decl_stmt>
   <expr_stmt><expr><call><name pos:line="484" pos:column="4">currentValue</name><argument_list pos:line="484" pos:column="16">()</argument_list></call> <op:operator pos:line="484" pos:column="19">=</op:operator> <call><name pos:line="484" pos:column="21">Value</name><argument_list pos:line="484" pos:column="26">( <argument><expr><name pos:line="484" pos:column="28">objectValue</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <while pos:line="485" pos:column="4">while <condition pos:line="485" pos:column="10">( <expr><call><name pos:line="485" pos:column="12">readToken</name><argument_list pos:line="485" pos:column="21">( <argument><expr><name pos:line="485" pos:column="23">tokenName</name></expr></argument> )</argument_list></call></expr> )</condition>
   <block pos:line="486" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="487" pos:column="7">bool</name></type> <name pos:line="487" pos:column="12">initialTokenOk</name> =<init pos:line="487" pos:column="28"> <expr><lit:literal type="boolean" pos:line="487" pos:column="29">true</lit:literal></expr></init></decl>;</decl_stmt>
      <while pos:line="488" pos:column="7">while <condition pos:line="488" pos:column="13">( <expr><name pos:line="488" pos:column="15">tokenName</name><op:operator pos:line="488" pos:column="24">.</op:operator><name pos:line="488" pos:column="25">type_</name> <op:operator pos:line="488" pos:column="31">==</op:operator> <name pos:line="488" pos:column="34">tokenComment</name>  <op:operator pos:line="488" pos:column="48">&amp;&amp;</op:operator>  <name pos:line="488" pos:column="52">initialTokenOk</name></expr> )</condition>
         <expr_stmt><expr><name pos:line="489" pos:column="10">initialTokenOk</name> <op:operator pos:line="489" pos:column="25">=</op:operator> <call><name pos:line="489" pos:column="27">readToken</name><argument_list pos:line="489" pos:column="36">( <argument><expr><name pos:line="489" pos:column="38">tokenName</name></expr></argument> )</argument_list></call></expr>;</expr_stmt></while>
      <if pos:line="490" pos:column="7">if  <condition pos:line="490" pos:column="11">( <expr><op:operator pos:line="490" pos:column="13">!</op:operator><name pos:line="490" pos:column="14">initialTokenOk</name></expr> )</condition><then pos:line="490" pos:column="30">
         <break pos:line="491" pos:column="10">break;</break></then></if>
      <if pos:line="492" pos:column="7">if <condition pos:line="492" pos:column="10">( <expr><name pos:line="492" pos:column="12">tokenName</name><op:operator pos:line="492" pos:column="21">.</op:operator><name pos:line="492" pos:column="22">type_</name> <op:operator pos:line="492" pos:column="28">==</op:operator> <name pos:line="492" pos:column="31">tokenObjectEnd</name>  <op:operator pos:line="492" pos:column="47">&amp;&amp;</op:operator>  <name pos:line="492" pos:column="51">name</name><op:operator pos:line="492" pos:column="55">.</op:operator><call><name pos:line="492" pos:column="56">empty</name><argument_list pos:line="492" pos:column="61">()</argument_list></call></expr> )</condition><then pos:line="492" pos:column="65">  <comment type="line" pos:line="492" pos:column="67">// empty object</comment>
         <return pos:line="493" pos:column="10">return <expr><lit:literal type="boolean" pos:line="493" pos:column="17">true</lit:literal></expr>;</return></then></if>
      <if pos:line="494" pos:column="7">if <condition pos:line="494" pos:column="10">( <expr><name pos:line="494" pos:column="12">tokenName</name><op:operator pos:line="494" pos:column="21">.</op:operator><name pos:line="494" pos:column="22">type_</name> <op:operator pos:line="494" pos:column="28">!=</op:operator> <name pos:line="494" pos:column="31">tokenString</name></expr> )</condition><then pos:line="494" pos:column="44">
         <break pos:line="495" pos:column="10">break;</break></then></if>
      
      <expr_stmt><expr><name pos:line="497" pos:column="7">name</name> <op:operator pos:line="497" pos:column="12">=</op:operator> <lit:literal type="string" pos:line="497" pos:column="14">""</lit:literal></expr>;</expr_stmt>
      <if pos:line="498" pos:column="7">if <condition pos:line="498" pos:column="10">( <expr><op:operator pos:line="498" pos:column="12">!</op:operator><call><name pos:line="498" pos:column="13">decodeString</name><argument_list pos:line="498" pos:column="25">( <argument><expr><name pos:line="498" pos:column="27">tokenName</name></expr></argument>, <argument><expr><name pos:line="498" pos:column="38">name</name></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="498" pos:column="46">
         <return pos:line="499" pos:column="10">return <expr><call><name pos:line="499" pos:column="17">recoverFromError</name><argument_list pos:line="499" pos:column="33">( <argument><expr><name pos:line="499" pos:column="35">tokenObjectEnd</name></expr></argument> )</argument_list></call></expr>;</return></then></if>

      <decl_stmt><decl><type><name pos:line="501" pos:column="7">Token</name></type> <name pos:line="501" pos:column="13">colon</name></decl>;</decl_stmt>
      <if pos:line="502" pos:column="7">if <condition pos:line="502" pos:column="10">( <expr><op:operator pos:line="502" pos:column="12">!</op:operator><call><name pos:line="502" pos:column="13">readToken</name><argument_list pos:line="502" pos:column="22">( <argument><expr><name pos:line="502" pos:column="24">colon</name></expr></argument> )</argument_list></call> <op:operator pos:line="502" pos:column="32">||</op:operator>  <name pos:line="502" pos:column="36">colon</name><op:operator pos:line="502" pos:column="41">.</op:operator><name pos:line="502" pos:column="42">type_</name> <op:operator pos:line="502" pos:column="48">!=</op:operator> <name pos:line="502" pos:column="51">tokenMemberSeparator</name></expr> )</condition><then pos:line="502" pos:column="73">
      <block pos:line="503" pos:column="7">{
         <return pos:line="504" pos:column="10">return <expr><call><name pos:line="504" pos:column="17">addErrorAndRecover</name><argument_list pos:line="504" pos:column="35">( <argument><expr><lit:literal type="string" pos:line="504" pos:column="37">"Missing ':' after object member name"</lit:literal></expr></argument>, 
                                    <argument><expr><name pos:line="505" pos:column="37">colon</name></expr></argument>, 
                                    <argument><expr><name pos:line="506" pos:column="37">tokenObjectEnd</name></expr></argument> )</argument_list></call></expr>;</return>
      }</block></then></if>
      <decl_stmt><decl><type><name pos:line="508" pos:column="7">Value</name> <type:modifier pos:line="508" pos:column="13">&amp;</type:modifier></type><name pos:line="508" pos:column="14">value</name> =<init pos:line="508" pos:column="21"> <expr><call><name pos:line="508" pos:column="22">currentValue</name><argument_list pos:line="508" pos:column="34">()</argument_list></call><index pos:line="508" pos:column="36">[ <expr><name pos:line="508" pos:column="38">name</name></expr> ]</index></expr></init></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="509" pos:column="7">nodes_</name><op:operator pos:line="509" pos:column="13">.</op:operator><call><name pos:line="509" pos:column="14">push</name><argument_list pos:line="509" pos:column="18">( <argument><expr><op:operator pos:line="509" pos:column="20">&amp;</op:operator><name pos:line="509" pos:column="21">value</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <decl_stmt><decl><type><name pos:line="510" pos:column="7">bool</name></type> <name pos:line="510" pos:column="12">ok</name> =<init pos:line="510" pos:column="16"> <expr><call><name pos:line="510" pos:column="17">readValue</name><argument_list pos:line="510" pos:column="26">()</argument_list></call></expr></init></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="511" pos:column="7">nodes_</name><op:operator pos:line="511" pos:column="13">.</op:operator><call><name pos:line="511" pos:column="14">pop</name><argument_list pos:line="511" pos:column="17">()</argument_list></call></expr>;</expr_stmt>
      <if pos:line="512" pos:column="7">if <condition pos:line="512" pos:column="10">( <expr><op:operator pos:line="512" pos:column="12">!</op:operator><name pos:line="512" pos:column="13">ok</name></expr> )</condition><then pos:line="512" pos:column="17"> <comment type="line" pos:line="512" pos:column="18">// error already set</comment>
         <return pos:line="513" pos:column="10">return <expr><call><name pos:line="513" pos:column="17">recoverFromError</name><argument_list pos:line="513" pos:column="33">( <argument><expr><name pos:line="513" pos:column="35">tokenObjectEnd</name></expr></argument> )</argument_list></call></expr>;</return></then></if>

      <decl_stmt><decl><type><name pos:line="515" pos:column="7">Token</name></type> <name pos:line="515" pos:column="13">comma</name></decl>;</decl_stmt>
      <if pos:line="516" pos:column="7">if <condition pos:line="516" pos:column="10">( <expr><op:operator pos:line="516" pos:column="12">!</op:operator><call><name pos:line="516" pos:column="13">readToken</name><argument_list pos:line="516" pos:column="22">( <argument><expr><name pos:line="516" pos:column="24">comma</name></expr></argument> )</argument_list></call>
            <op:operator pos:line="517" pos:column="13">||</op:operator>  <op:operator pos:line="517" pos:column="17">(</op:operator> <name pos:line="517" pos:column="19">comma</name><op:operator pos:line="517" pos:column="24">.</op:operator><name pos:line="517" pos:column="25">type_</name> <op:operator pos:line="517" pos:column="31">!=</op:operator> <name pos:line="517" pos:column="34">tokenObjectEnd</name>  <op:operator pos:line="517" pos:column="50">&amp;&amp;</op:operator>  
                  <name pos:line="518" pos:column="19">comma</name><op:operator pos:line="518" pos:column="24">.</op:operator><name pos:line="518" pos:column="25">type_</name> <op:operator pos:line="518" pos:column="31">!=</op:operator> <name pos:line="518" pos:column="34">tokenArraySeparator</name> <op:operator pos:line="518" pos:column="54">&amp;&amp;</op:operator>
		  <name pos:line="519" pos:column="19">comma</name><op:operator pos:line="519" pos:column="24">.</op:operator><name pos:line="519" pos:column="25">type_</name> <op:operator pos:line="519" pos:column="31">!=</op:operator> <name pos:line="519" pos:column="34">tokenComment</name> <op:operator pos:line="519" pos:column="47">)</op:operator></expr> )</condition><then pos:line="519" pos:column="50">
      <block pos:line="520" pos:column="7">{
         <return pos:line="521" pos:column="10">return <expr><call><name pos:line="521" pos:column="17">addErrorAndRecover</name><argument_list pos:line="521" pos:column="35">( <argument><expr><lit:literal type="string" pos:line="521" pos:column="37">"Missing ',' or '}' in object declaration"</lit:literal></expr></argument>, 
                                    <argument><expr><name pos:line="522" pos:column="37">comma</name></expr></argument>, 
                                    <argument><expr><name pos:line="523" pos:column="37">tokenObjectEnd</name></expr></argument> )</argument_list></call></expr>;</return>
      }</block></then></if>
      <decl_stmt><decl><type><name pos:line="525" pos:column="7">bool</name></type> <name pos:line="525" pos:column="12">finalizeTokenOk</name> =<init pos:line="525" pos:column="29"> <expr><lit:literal type="boolean" pos:line="525" pos:column="30">true</lit:literal></expr></init></decl>;</decl_stmt>
      <while pos:line="526" pos:column="7">while <condition pos:line="526" pos:column="13">( <expr><name pos:line="526" pos:column="15">comma</name><op:operator pos:line="526" pos:column="20">.</op:operator><name pos:line="526" pos:column="21">type_</name> <op:operator pos:line="526" pos:column="27">==</op:operator> <name pos:line="526" pos:column="30">tokenComment</name> <op:operator pos:line="526" pos:column="43">&amp;&amp;</op:operator>
              <name pos:line="527" pos:column="15">finalizeTokenOk</name></expr> )</condition>
         <expr_stmt><expr><name pos:line="528" pos:column="10">finalizeTokenOk</name> <op:operator pos:line="528" pos:column="26">=</op:operator> <call><name pos:line="528" pos:column="28">readToken</name><argument_list pos:line="528" pos:column="37">( <argument><expr><name pos:line="528" pos:column="39">comma</name></expr></argument> )</argument_list></call></expr>;</expr_stmt></while>
      <if pos:line="529" pos:column="7">if <condition pos:line="529" pos:column="10">( <expr><name pos:line="529" pos:column="12">comma</name><op:operator pos:line="529" pos:column="17">.</op:operator><name pos:line="529" pos:column="18">type_</name> <op:operator pos:line="529" pos:column="24">==</op:operator> <name pos:line="529" pos:column="27">tokenObjectEnd</name></expr> )</condition><then pos:line="529" pos:column="43">
         <return pos:line="530" pos:column="10">return <expr><lit:literal type="boolean" pos:line="530" pos:column="17">true</lit:literal></expr>;</return></then></if>
   }</block></while>
   <return pos:line="532" pos:column="4">return <expr><call><name pos:line="532" pos:column="11">addErrorAndRecover</name><argument_list pos:line="532" pos:column="29">( <argument><expr><lit:literal type="string" pos:line="532" pos:column="31">"Missing '}' or object member name"</lit:literal></expr></argument>, 
                              <argument><expr><name pos:line="533" pos:column="31">tokenName</name></expr></argument>, 
                              <argument><expr><name pos:line="534" pos:column="31">tokenObjectEnd</name></expr></argument> )</argument_list></call></expr>;</return>
}</block></function>


<function><type><name pos:line="538" pos:column="1">bool</name></type> 
<name><name pos:line="539" pos:column="1">Reader</name><op:operator pos:line="539" pos:column="7">::</op:operator><name pos:line="539" pos:column="9">readArray</name></name><parameter_list pos:line="539" pos:column="18">( <param><decl><type><name pos:line="539" pos:column="20">Token</name> <type:modifier pos:line="539" pos:column="26">&amp;</type:modifier></type><name pos:line="539" pos:column="27">tokenStart</name></decl></param> )</parameter_list>
<block pos:line="540" pos:column="1">{
   <expr_stmt><expr><call><name pos:line="541" pos:column="4">currentValue</name><argument_list pos:line="541" pos:column="16">()</argument_list></call> <op:operator pos:line="541" pos:column="19">=</op:operator> <call><name pos:line="541" pos:column="21">Value</name><argument_list pos:line="541" pos:column="26">( <argument><expr><name pos:line="541" pos:column="28">arrayValue</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <expr_stmt><expr><call><name pos:line="542" pos:column="4">skipSpaces</name><argument_list pos:line="542" pos:column="14">()</argument_list></call></expr>;</expr_stmt>
   <if pos:line="543" pos:column="4">if <condition pos:line="543" pos:column="7">( <expr><op:operator pos:line="543" pos:column="9">*</op:operator><name pos:line="543" pos:column="10">current_</name> <op:operator pos:line="543" pos:column="19">==</op:operator> <lit:literal type="char" pos:line="543" pos:column="22">']'</lit:literal></expr> )</condition><then pos:line="543" pos:column="27"> <comment type="line" pos:line="543" pos:column="28">// empty array</comment>
   <block pos:line="544" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="545" pos:column="7">Token</name></type> <name pos:line="545" pos:column="13">endArray</name></decl>;</decl_stmt>
      <expr_stmt><expr><call><name pos:line="546" pos:column="7">readToken</name><argument_list pos:line="546" pos:column="16">( <argument><expr><name pos:line="546" pos:column="18">endArray</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <return pos:line="547" pos:column="7">return <expr><lit:literal type="boolean" pos:line="547" pos:column="14">true</lit:literal></expr>;</return>
   }</block></then></if>
   <decl_stmt><decl><type><name pos:line="549" pos:column="4">int</name></type> <name pos:line="549" pos:column="8">index</name> =<init pos:line="549" pos:column="15"> <expr><lit:literal type="number" pos:line="549" pos:column="16">0</lit:literal></expr></init></decl>;</decl_stmt>
   <while pos:line="550" pos:column="4">while <condition pos:line="550" pos:column="10">( <expr><lit:literal type="boolean" pos:line="550" pos:column="12">true</lit:literal></expr> )</condition>
   <block pos:line="551" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="552" pos:column="7">Value</name> <type:modifier pos:line="552" pos:column="13">&amp;</type:modifier></type><name pos:line="552" pos:column="14">value</name> =<init pos:line="552" pos:column="21"> <expr><call><name pos:line="552" pos:column="22">currentValue</name><argument_list pos:line="552" pos:column="34">()</argument_list></call><index pos:line="552" pos:column="36">[ <expr><name pos:line="552" pos:column="38">index</name><op:operator pos:line="552" pos:column="43">++</op:operator></expr> ]</index></expr></init></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="553" pos:column="7">nodes_</name><op:operator pos:line="553" pos:column="13">.</op:operator><call><name pos:line="553" pos:column="14">push</name><argument_list pos:line="553" pos:column="18">( <argument><expr><op:operator pos:line="553" pos:column="20">&amp;</op:operator><name pos:line="553" pos:column="21">value</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <decl_stmt><decl><type><name pos:line="554" pos:column="7">bool</name></type> <name pos:line="554" pos:column="12">ok</name> =<init pos:line="554" pos:column="16"> <expr><call><name pos:line="554" pos:column="17">readValue</name><argument_list pos:line="554" pos:column="26">()</argument_list></call></expr></init></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="555" pos:column="7">nodes_</name><op:operator pos:line="555" pos:column="13">.</op:operator><call><name pos:line="555" pos:column="14">pop</name><argument_list pos:line="555" pos:column="17">()</argument_list></call></expr>;</expr_stmt>
      <if pos:line="556" pos:column="7">if <condition pos:line="556" pos:column="10">( <expr><op:operator pos:line="556" pos:column="12">!</op:operator><name pos:line="556" pos:column="13">ok</name></expr> )</condition><then pos:line="556" pos:column="17"> <comment type="line" pos:line="556" pos:column="18">// error already set</comment>
         <return pos:line="557" pos:column="10">return <expr><call><name pos:line="557" pos:column="17">recoverFromError</name><argument_list pos:line="557" pos:column="33">( <argument><expr><name pos:line="557" pos:column="35">tokenArrayEnd</name></expr></argument> )</argument_list></call></expr>;</return></then></if>

      <decl_stmt><decl><type><name pos:line="559" pos:column="7">Token</name></type> <name pos:line="559" pos:column="13">token</name></decl>;</decl_stmt>
      <comment type="line" pos:line="560" pos:column="7">// Accept Comment after last item in the array.</comment>
      <expr_stmt><expr><name pos:line="561" pos:column="7">ok</name> <op:operator pos:line="561" pos:column="10">=</op:operator> <call><name pos:line="561" pos:column="12">readToken</name><argument_list pos:line="561" pos:column="21">( <argument><expr><name pos:line="561" pos:column="23">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <while pos:line="562" pos:column="7">while <condition pos:line="562" pos:column="13">( <expr><name pos:line="562" pos:column="15">token</name><op:operator pos:line="562" pos:column="20">.</op:operator><name pos:line="562" pos:column="21">type_</name> <op:operator pos:line="562" pos:column="27">==</op:operator> <name pos:line="562" pos:column="30">tokenComment</name>  <op:operator pos:line="562" pos:column="44">&amp;&amp;</op:operator>  <name pos:line="562" pos:column="48">ok</name></expr> )</condition>
      <block pos:line="563" pos:column="7">{
         <expr_stmt><expr><name pos:line="564" pos:column="10">ok</name> <op:operator pos:line="564" pos:column="13">=</op:operator> <call><name pos:line="564" pos:column="15">readToken</name><argument_list pos:line="564" pos:column="24">( <argument><expr><name pos:line="564" pos:column="26">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      }</block></while>
      <decl_stmt><decl><type><name pos:line="566" pos:column="7">bool</name></type> <name pos:line="566" pos:column="12">badTokenType</name> =<init pos:line="566" pos:column="26"> <expr><op:operator pos:line="566" pos:column="27">(</op:operator> <name pos:line="566" pos:column="29">token</name><op:operator pos:line="566" pos:column="34">.</op:operator><name pos:line="566" pos:column="35">type_</name> <op:operator pos:line="566" pos:column="41">==</op:operator> <name pos:line="566" pos:column="44">tokenArraySeparator</name>  <op:operator pos:line="566" pos:column="65">&amp;&amp;</op:operator>  
                            <name pos:line="567" pos:column="29">token</name><op:operator pos:line="567" pos:column="34">.</op:operator><name pos:line="567" pos:column="35">type_</name> <op:operator pos:line="567" pos:column="41">==</op:operator> <name pos:line="567" pos:column="44">tokenArrayEnd</name> <op:operator pos:line="567" pos:column="58">)</op:operator></expr></init></decl>;</decl_stmt>
      <if pos:line="568" pos:column="7">if <condition pos:line="568" pos:column="10">( <expr><op:operator pos:line="568" pos:column="12">!</op:operator><name pos:line="568" pos:column="13">ok</name>  <op:operator pos:line="568" pos:column="17">||</op:operator>  <name pos:line="568" pos:column="21">badTokenType</name></expr> )</condition><then pos:line="568" pos:column="35">
      <block pos:line="569" pos:column="7">{
         <return pos:line="570" pos:column="10">return <expr><call><name pos:line="570" pos:column="17">addErrorAndRecover</name><argument_list pos:line="570" pos:column="35">( <argument><expr><lit:literal type="string" pos:line="570" pos:column="37">"Missing ',' or ']' in array declaration"</lit:literal></expr></argument>, 
                                    <argument><expr><name pos:line="571" pos:column="37">token</name></expr></argument>, 
                                    <argument><expr><name pos:line="572" pos:column="37">tokenArrayEnd</name></expr></argument> )</argument_list></call></expr>;</return>
      }</block></then></if>
      <if pos:line="574" pos:column="7">if <condition pos:line="574" pos:column="10">( <expr><name pos:line="574" pos:column="12">token</name><op:operator pos:line="574" pos:column="17">.</op:operator><name pos:line="574" pos:column="18">type_</name> <op:operator pos:line="574" pos:column="24">==</op:operator> <name pos:line="574" pos:column="27">tokenArrayEnd</name></expr> )</condition><then pos:line="574" pos:column="42">
         <break pos:line="575" pos:column="10">break;</break></then></if>
   }</block></while>
   <return pos:line="577" pos:column="4">return <expr><lit:literal type="boolean" pos:line="577" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="581" pos:column="1">bool</name></type> 
<name><name pos:line="582" pos:column="1">Reader</name><op:operator pos:line="582" pos:column="7">::</op:operator><name pos:line="582" pos:column="9">decodeNumber</name></name><parameter_list pos:line="582" pos:column="21">( <param><decl><type><name pos:line="582" pos:column="23">Token</name> <type:modifier pos:line="582" pos:column="29">&amp;</type:modifier></type><name pos:line="582" pos:column="30">token</name></decl></param> )</parameter_list>
<block pos:line="583" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="584" pos:column="4">bool</name></type> <name pos:line="584" pos:column="9">isDouble</name> =<init pos:line="584" pos:column="19"> <expr><lit:literal type="boolean" pos:line="584" pos:column="20">false</lit:literal></expr></init></decl>;</decl_stmt>
   <for pos:line="585" pos:column="4">for ( <init><decl><type><name pos:line="585" pos:column="10">Location</name></type> <name pos:line="585" pos:column="19">inspect</name> =<init pos:line="585" pos:column="28"> <expr><name pos:line="585" pos:column="29">token</name><op:operator pos:line="585" pos:column="34">.</op:operator><name pos:line="585" pos:column="35">start_</name></expr></init></decl>;</init> <condition><expr><name pos:line="585" pos:column="43">inspect</name> <op:operator pos:line="585" pos:column="51">!=</op:operator> <name pos:line="585" pos:column="54">token</name><op:operator pos:line="585" pos:column="59">.</op:operator><name pos:line="585" pos:column="60">end_</name></expr>;</condition> <incr><expr><op:operator pos:line="585" pos:column="66">++</op:operator><name pos:line="585" pos:column="68">inspect</name></expr></incr> )
   <block pos:line="586" pos:column="4">{
      <expr_stmt><expr><name pos:line="587" pos:column="7">isDouble</name> <op:operator pos:line="587" pos:column="16">=</op:operator> <name pos:line="587" pos:column="18">isDouble</name>  
                 <op:operator pos:line="588" pos:column="18">||</op:operator>  <call><name pos:line="588" pos:column="22">in</name><argument_list pos:line="588" pos:column="24">( <argument><expr><op:operator pos:line="588" pos:column="26">*</op:operator><name pos:line="588" pos:column="27">inspect</name></expr></argument>, <argument><expr><lit:literal type="char" pos:line="588" pos:column="36">'.'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="588" pos:column="41">'e'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="588" pos:column="46">'E'</lit:literal></expr></argument>, <argument><expr><lit:literal type="char" pos:line="588" pos:column="51">'+'</lit:literal></expr></argument> )</argument_list></call>  
                 <op:operator pos:line="589" pos:column="18">||</op:operator>  <op:operator pos:line="589" pos:column="22">(</op:operator> <op:operator pos:line="589" pos:column="24">*</op:operator><name pos:line="589" pos:column="25">inspect</name> <op:operator pos:line="589" pos:column="33">==</op:operator> <lit:literal type="char" pos:line="589" pos:column="36">'-'</lit:literal>  <op:operator pos:line="589" pos:column="41">&amp;&amp;</op:operator>  <name pos:line="589" pos:column="45">inspect</name> <op:operator pos:line="589" pos:column="53">!=</op:operator> <name pos:line="589" pos:column="56">token</name><op:operator pos:line="589" pos:column="61">.</op:operator><name pos:line="589" pos:column="62">start_</name> <op:operator pos:line="589" pos:column="69">)</op:operator></expr>;</expr_stmt>
   }</block></for>
   <if pos:line="591" pos:column="4">if <condition pos:line="591" pos:column="7">( <expr><name pos:line="591" pos:column="9">isDouble</name></expr> )</condition><then pos:line="591" pos:column="19">
      <return pos:line="592" pos:column="7">return <expr><call><name pos:line="592" pos:column="14">decodeDouble</name><argument_list pos:line="592" pos:column="26">( <argument><expr><name pos:line="592" pos:column="28">token</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
   <decl_stmt><decl><type><name pos:line="593" pos:column="4">Location</name></type> <name pos:line="593" pos:column="13">current</name> =<init pos:line="593" pos:column="22"> <expr><name pos:line="593" pos:column="23">token</name><op:operator pos:line="593" pos:column="28">.</op:operator><name pos:line="593" pos:column="29">start_</name></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="594" pos:column="4">bool</name></type> <name pos:line="594" pos:column="9">isNegative</name> =<init pos:line="594" pos:column="21"> <expr><op:operator pos:line="594" pos:column="22">*</op:operator><name pos:line="594" pos:column="23">current</name> <op:operator pos:line="594" pos:column="31">==</op:operator> <lit:literal type="char" pos:line="594" pos:column="34">'-'</lit:literal></expr></init></decl>;</decl_stmt>
   <if pos:line="595" pos:column="4">if <condition pos:line="595" pos:column="7">( <expr><name pos:line="595" pos:column="9">isNegative</name></expr> )</condition><then pos:line="595" pos:column="21">
      <expr_stmt><expr><op:operator pos:line="596" pos:column="7">++</op:operator><name pos:line="596" pos:column="9">current</name></expr>;</expr_stmt></then></if>
   <decl_stmt><decl><type><name><name pos:line="597" pos:column="4">Value</name><op:operator pos:line="597" pos:column="9">::</op:operator><name pos:line="597" pos:column="11">UInt</name></name></type> <name pos:line="597" pos:column="16">threshold</name> =<init pos:line="597" pos:column="27"> <expr><op:operator pos:line="597" pos:column="28">(</op:operator><name pos:line="597" pos:column="29">isNegative</name> <op:operator pos:line="597" pos:column="40">?</op:operator> <call><name><name pos:line="597" pos:column="42">Value</name><op:operator pos:line="597" pos:column="47">::</op:operator><name pos:line="597" pos:column="49">UInt</name></name><argument_list pos:line="597" pos:column="53">(<argument><expr><op:operator pos:line="597" pos:column="54">-</op:operator><name><name pos:line="597" pos:column="55">Value</name><op:operator pos:line="597" pos:column="60">::</op:operator><name pos:line="597" pos:column="62">minInt</name></name></expr></argument>)</argument_list></call> 
                                       <op:operator pos:line="598" pos:column="40">:</op:operator> <name><name pos:line="598" pos:column="42">Value</name><op:operator pos:line="598" pos:column="47">::</op:operator><name pos:line="598" pos:column="49">maxUInt</name></name><op:operator pos:line="598" pos:column="56">)</op:operator> <op:operator pos:line="598" pos:column="58">/</op:operator> <lit:literal type="number" pos:line="598" pos:column="60">10</lit:literal></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name><name pos:line="599" pos:column="4">Value</name><op:operator pos:line="599" pos:column="9">::</op:operator><name pos:line="599" pos:column="11">UInt</name></name></type> <name pos:line="599" pos:column="16">value</name> =<init pos:line="599" pos:column="23"> <expr><lit:literal type="number" pos:line="599" pos:column="24">0</lit:literal></expr></init></decl>;</decl_stmt>
   <while pos:line="600" pos:column="4">while <condition pos:line="600" pos:column="10">( <expr><name pos:line="600" pos:column="12">current</name> <op:operator pos:line="600" pos:column="20">&lt;</op:operator> <name pos:line="600" pos:column="22">token</name><op:operator pos:line="600" pos:column="27">.</op:operator><name pos:line="600" pos:column="28">end_</name></expr> )</condition>
   <block pos:line="601" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="602" pos:column="7">Char</name></type> <name pos:line="602" pos:column="12">c</name> =<init pos:line="602" pos:column="15"> <expr><op:operator pos:line="602" pos:column="16">*</op:operator><name pos:line="602" pos:column="17">current</name><op:operator pos:line="602" pos:column="24">++</op:operator></expr></init></decl>;</decl_stmt>
      <if pos:line="603" pos:column="7">if <condition pos:line="603" pos:column="10">( <expr><name pos:line="603" pos:column="12">c</name> <op:operator pos:line="603" pos:column="14">&lt;</op:operator> <lit:literal type="char" pos:line="603" pos:column="16">'0'</lit:literal>  <op:operator pos:line="603" pos:column="21">||</op:operator>  <name pos:line="603" pos:column="25">c</name> <op:operator pos:line="603" pos:column="27">&gt;</op:operator> <lit:literal type="char" pos:line="603" pos:column="29">'9'</lit:literal></expr> )</condition><then pos:line="603" pos:column="34">
         <return pos:line="604" pos:column="10">return <expr><call><name pos:line="604" pos:column="17">addError</name><argument_list pos:line="604" pos:column="25">( <argument><expr><lit:literal type="string" pos:line="604" pos:column="27">"'"</lit:literal> <op:operator pos:line="604" pos:column="31">+</op:operator> <call><name><name pos:line="604" pos:column="33">std</name><op:operator pos:line="604" pos:column="36">::</op:operator><name pos:line="604" pos:column="38">string</name></name><argument_list pos:line="604" pos:column="44">( <argument><expr><name pos:line="604" pos:column="46">token</name><op:operator pos:line="604" pos:column="51">.</op:operator><name pos:line="604" pos:column="52">start_</name></expr></argument>, <argument><expr><name pos:line="604" pos:column="60">token</name><op:operator pos:line="604" pos:column="65">.</op:operator><name pos:line="604" pos:column="66">end_</name></expr></argument> )</argument_list></call> <op:operator pos:line="604" pos:column="73">+</op:operator> <lit:literal type="string" pos:line="604" pos:column="75">"' is not a number."</lit:literal></expr></argument>, <argument><expr><name pos:line="604" pos:column="97">token</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
      <if pos:line="605" pos:column="7">if <condition pos:line="605" pos:column="10">( <expr><name pos:line="605" pos:column="12">value</name> <op:operator pos:line="605" pos:column="18">&gt;=</op:operator> <name pos:line="605" pos:column="21">threshold</name></expr> )</condition><then pos:line="605" pos:column="32">
         <return pos:line="606" pos:column="10">return <expr><call><name pos:line="606" pos:column="17">decodeDouble</name><argument_list pos:line="606" pos:column="29">( <argument><expr><name pos:line="606" pos:column="31">token</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
      <expr_stmt><expr><name pos:line="607" pos:column="7">value</name> <op:operator pos:line="607" pos:column="13">=</op:operator> <name pos:line="607" pos:column="15">value</name> <op:operator pos:line="607" pos:column="21">*</op:operator> <lit:literal type="number" pos:line="607" pos:column="23">10</lit:literal> <op:operator pos:line="607" pos:column="26">+</op:operator> <call><name><name pos:line="607" pos:column="28">Value</name><op:operator pos:line="607" pos:column="33">::</op:operator><name pos:line="607" pos:column="35">UInt</name></name><argument_list pos:line="607" pos:column="39">(<argument><expr><name pos:line="607" pos:column="40">c</name> <op:operator pos:line="607" pos:column="42">-</op:operator> <lit:literal type="char" pos:line="607" pos:column="44">'0'</lit:literal></expr></argument>)</argument_list></call></expr>;</expr_stmt>
   }</block></while>
   <if pos:line="609" pos:column="4">if <condition pos:line="609" pos:column="7">( <expr><name pos:line="609" pos:column="9">isNegative</name></expr> )</condition><then pos:line="609" pos:column="21">
      <expr_stmt><expr><call><name pos:line="610" pos:column="7">currentValue</name><argument_list pos:line="610" pos:column="19">()</argument_list></call> <op:operator pos:line="610" pos:column="22">=</op:operator> <op:operator pos:line="610" pos:column="24">-</op:operator><call><name><name pos:line="610" pos:column="25">Value</name><op:operator pos:line="610" pos:column="30">::</op:operator><name pos:line="610" pos:column="32">Int</name></name><argument_list pos:line="610" pos:column="35">( <argument><expr><name pos:line="610" pos:column="37">value</name></expr></argument> )</argument_list></call></expr>;</expr_stmt></then>
   <else pos:line="611" pos:column="4">else <if pos:line="611" pos:column="9">if <condition pos:line="611" pos:column="12">( <expr><name pos:line="611" pos:column="14">value</name> <op:operator pos:line="611" pos:column="20">&lt;=</op:operator> <call><name><name pos:line="611" pos:column="23">Value</name><op:operator pos:line="611" pos:column="28">::</op:operator><name pos:line="611" pos:column="30">UInt</name></name><argument_list pos:line="611" pos:column="34">(<argument><expr><name><name pos:line="611" pos:column="35">Value</name><op:operator pos:line="611" pos:column="40">::</op:operator><name pos:line="611" pos:column="42">maxInt</name></name></expr></argument>)</argument_list></call></expr> )</condition><then pos:line="611" pos:column="51">
      <expr_stmt><expr><call><name pos:line="612" pos:column="7">currentValue</name><argument_list pos:line="612" pos:column="19">()</argument_list></call> <op:operator pos:line="612" pos:column="22">=</op:operator> <call><name><name pos:line="612" pos:column="24">Value</name><op:operator pos:line="612" pos:column="29">::</op:operator><name pos:line="612" pos:column="31">Int</name></name><argument_list pos:line="612" pos:column="34">( <argument><expr><name pos:line="612" pos:column="36">value</name></expr></argument> )</argument_list></call></expr>;</expr_stmt></then>
   <else pos:line="613" pos:column="4">else
      <expr_stmt><expr><call><name pos:line="614" pos:column="7">currentValue</name><argument_list pos:line="614" pos:column="19">()</argument_list></call> <op:operator pos:line="614" pos:column="22">=</op:operator> <name pos:line="614" pos:column="24">value</name></expr>;</expr_stmt></else></if></else></if>
   <return pos:line="615" pos:column="4">return <expr><lit:literal type="boolean" pos:line="615" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="619" pos:column="1">bool</name></type> 
<name><name pos:line="620" pos:column="1">Reader</name><op:operator pos:line="620" pos:column="7">::</op:operator><name pos:line="620" pos:column="9">decodeDouble</name></name><parameter_list pos:line="620" pos:column="21">( <param><decl><type><name pos:line="620" pos:column="23">Token</name> <type:modifier pos:line="620" pos:column="29">&amp;</type:modifier></type><name pos:line="620" pos:column="30">token</name></decl></param> )</parameter_list>
<block pos:line="621" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="622" pos:column="4">double</name></type> <name pos:line="622" pos:column="11">value</name> =<init pos:line="622" pos:column="18"> <expr><lit:literal type="number" pos:line="622" pos:column="19">0</lit:literal></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="623" pos:column="4">const</name> <name pos:line="623" pos:column="10">int</name></type> <name pos:line="623" pos:column="14">bufferSize</name> =<init pos:line="623" pos:column="26"> <expr><lit:literal type="number" pos:line="623" pos:column="27">32</lit:literal></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="624" pos:column="4">int</name></type> <name pos:line="624" pos:column="8">count</name></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="625" pos:column="4">int</name></type> <name pos:line="625" pos:column="8">length</name> =<init pos:line="625" pos:column="16"> <expr><call><name pos:line="625" pos:column="17">int</name><argument_list pos:line="625" pos:column="20">(<argument><expr><name pos:line="625" pos:column="21">token</name><op:operator pos:line="625" pos:column="26">.</op:operator><name pos:line="625" pos:column="27">end_</name> <op:operator pos:line="625" pos:column="32">-</op:operator> <name pos:line="625" pos:column="34">token</name><op:operator pos:line="625" pos:column="39">.</op:operator><name pos:line="625" pos:column="40">start_</name></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
   <if pos:line="626" pos:column="4">if <condition pos:line="626" pos:column="7">( <expr><name pos:line="626" pos:column="9">length</name> <op:operator pos:line="626" pos:column="16">&lt;=</op:operator> <name pos:line="626" pos:column="19">bufferSize</name></expr> )</condition><then pos:line="626" pos:column="31">
   <block pos:line="627" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="628" pos:column="7">Char</name></type> <name><name pos:line="628" pos:column="12">buffer</name><index pos:line="628" pos:column="18">[<expr><name pos:line="628" pos:column="19">bufferSize</name></expr>]</index></name></decl>;</decl_stmt>
      <expr_stmt><expr><call><name pos:line="629" pos:column="7">memcpy</name><argument_list pos:line="629" pos:column="13">( <argument><expr><name pos:line="629" pos:column="15">buffer</name></expr></argument>, <argument><expr><name pos:line="629" pos:column="23">token</name><op:operator pos:line="629" pos:column="28">.</op:operator><name pos:line="629" pos:column="29">start_</name></expr></argument>, <argument><expr><name pos:line="629" pos:column="37">length</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
      <expr_stmt><expr><name><name pos:line="630" pos:column="7">buffer</name><index pos:line="630" pos:column="13">[<expr><name pos:line="630" pos:column="14">length</name></expr>]</index></name> <op:operator pos:line="630" pos:column="22">=</op:operator> <lit:literal type="number" pos:line="630" pos:column="24">0</lit:literal></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="631" pos:column="7">count</name> <op:operator pos:line="631" pos:column="13">=</op:operator> <call><name pos:line="631" pos:column="15">sscanf</name><argument_list pos:line="631" pos:column="21">( <argument><expr><name pos:line="631" pos:column="23">buffer</name></expr></argument>, <argument><expr><lit:literal type="string" pos:line="631" pos:column="31">"%lf"</lit:literal></expr></argument>, <argument><expr><op:operator pos:line="631" pos:column="38">&amp;</op:operator><name pos:line="631" pos:column="39">value</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   }</block></then>
   <else pos:line="633" pos:column="4">else
   <block pos:line="634" pos:column="4">{
      <decl_stmt><decl><type><name><name pos:line="635" pos:column="7">std</name><op:operator pos:line="635" pos:column="10">::</op:operator><name pos:line="635" pos:column="12">string</name></name></type> <name pos:line="635" pos:column="19">buffer</name><argument_list pos:line="635" pos:column="25">( <argument><expr><name pos:line="635" pos:column="27">token</name><op:operator pos:line="635" pos:column="32">.</op:operator><name pos:line="635" pos:column="33">start_</name></expr></argument>, <argument><expr><name pos:line="635" pos:column="41">token</name><op:operator pos:line="635" pos:column="46">.</op:operator><name pos:line="635" pos:column="47">end_</name></expr></argument> )</argument_list></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="636" pos:column="7">count</name> <op:operator pos:line="636" pos:column="13">=</op:operator> <call><name pos:line="636" pos:column="15">sscanf</name><argument_list pos:line="636" pos:column="21">( <argument><expr><name pos:line="636" pos:column="23">buffer</name><op:operator pos:line="636" pos:column="29">.</op:operator><call><name pos:line="636" pos:column="30">c_str</name><argument_list pos:line="636" pos:column="35">()</argument_list></call></expr></argument>, <argument><expr><lit:literal type="string" pos:line="636" pos:column="39">"%lf"</lit:literal></expr></argument>, <argument><expr><op:operator pos:line="636" pos:column="46">&amp;</op:operator><name pos:line="636" pos:column="47">value</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   }</block></else></if>

   <if pos:line="639" pos:column="4">if <condition pos:line="639" pos:column="7">( <expr><name pos:line="639" pos:column="9">count</name> <op:operator pos:line="639" pos:column="15">!=</op:operator> <lit:literal type="number" pos:line="639" pos:column="18">1</lit:literal></expr> )</condition><then pos:line="639" pos:column="21">
      <return pos:line="640" pos:column="7">return <expr><call><name pos:line="640" pos:column="14">addError</name><argument_list pos:line="640" pos:column="22">( <argument><expr><lit:literal type="string" pos:line="640" pos:column="24">"'"</lit:literal> <op:operator pos:line="640" pos:column="28">+</op:operator> <call><name><name pos:line="640" pos:column="30">std</name><op:operator pos:line="640" pos:column="33">::</op:operator><name pos:line="640" pos:column="35">string</name></name><argument_list pos:line="640" pos:column="41">( <argument><expr><name pos:line="640" pos:column="43">token</name><op:operator pos:line="640" pos:column="48">.</op:operator><name pos:line="640" pos:column="49">start_</name></expr></argument>, <argument><expr><name pos:line="640" pos:column="57">token</name><op:operator pos:line="640" pos:column="62">.</op:operator><name pos:line="640" pos:column="63">end_</name></expr></argument> )</argument_list></call> <op:operator pos:line="640" pos:column="70">+</op:operator> <lit:literal type="string" pos:line="640" pos:column="72">"' is not a number."</lit:literal></expr></argument>, <argument><expr><name pos:line="640" pos:column="94">token</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
   <expr_stmt><expr><call><name pos:line="641" pos:column="4">currentValue</name><argument_list pos:line="641" pos:column="16">()</argument_list></call> <op:operator pos:line="641" pos:column="19">=</op:operator> <name pos:line="641" pos:column="21">value</name></expr>;</expr_stmt>
   <return pos:line="642" pos:column="4">return <expr><lit:literal type="boolean" pos:line="642" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="646" pos:column="1">bool</name></type> 
<name><name pos:line="647" pos:column="1">Reader</name><op:operator pos:line="647" pos:column="7">::</op:operator><name pos:line="647" pos:column="9">decodeString</name></name><parameter_list pos:line="647" pos:column="21">( <param><decl><type><name pos:line="647" pos:column="23">Token</name> <type:modifier pos:line="647" pos:column="29">&amp;</type:modifier></type><name pos:line="647" pos:column="30">token</name></decl></param> )</parameter_list>
<block pos:line="648" pos:column="1">{
   <decl_stmt><decl><type><name><name pos:line="649" pos:column="4">std</name><op:operator pos:line="649" pos:column="7">::</op:operator><name pos:line="649" pos:column="9">string</name></name></type> <name pos:line="649" pos:column="16">decoded</name></decl>;</decl_stmt>
   <if pos:line="650" pos:column="4">if <condition pos:line="650" pos:column="7">( <expr><op:operator pos:line="650" pos:column="9">!</op:operator><call><name pos:line="650" pos:column="10">decodeString</name><argument_list pos:line="650" pos:column="22">( <argument><expr><name pos:line="650" pos:column="24">token</name></expr></argument>, <argument><expr><name pos:line="650" pos:column="31">decoded</name></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="650" pos:column="42">
      <return pos:line="651" pos:column="7">return <expr><lit:literal type="boolean" pos:line="651" pos:column="14">false</lit:literal></expr>;</return></then></if>
   <expr_stmt><expr><call><name pos:line="652" pos:column="4">currentValue</name><argument_list pos:line="652" pos:column="16">()</argument_list></call> <op:operator pos:line="652" pos:column="19">=</op:operator> <name pos:line="652" pos:column="21">decoded</name></expr>;</expr_stmt>
   <return pos:line="653" pos:column="4">return <expr><lit:literal type="boolean" pos:line="653" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="657" pos:column="1">bool</name></type> 
<name><name pos:line="658" pos:column="1">Reader</name><op:operator pos:line="658" pos:column="7">::</op:operator><name pos:line="658" pos:column="9">decodeString</name></name><parameter_list pos:line="658" pos:column="21">( <param><decl><type><name pos:line="658" pos:column="23">Token</name> <type:modifier pos:line="658" pos:column="29">&amp;</type:modifier></type><name pos:line="658" pos:column="30">token</name></decl></param>, <param><decl><type><name><name pos:line="658" pos:column="37">std</name><op:operator pos:line="658" pos:column="40">::</op:operator><name pos:line="658" pos:column="42">string</name></name> <type:modifier pos:line="658" pos:column="49">&amp;</type:modifier></type><name pos:line="658" pos:column="50">decoded</name></decl></param> )</parameter_list>
<block pos:line="659" pos:column="1">{
   <expr_stmt><expr><name pos:line="660" pos:column="4">decoded</name><op:operator pos:line="660" pos:column="11">.</op:operator><call><name pos:line="660" pos:column="12">reserve</name><argument_list pos:line="660" pos:column="19">( <argument><expr><name pos:line="660" pos:column="21">token</name><op:operator pos:line="660" pos:column="26">.</op:operator><name pos:line="660" pos:column="27">end_</name> <op:operator pos:line="660" pos:column="32">-</op:operator> <name pos:line="660" pos:column="34">token</name><op:operator pos:line="660" pos:column="39">.</op:operator><name pos:line="660" pos:column="40">start_</name> <op:operator pos:line="660" pos:column="47">-</op:operator> <lit:literal type="number" pos:line="660" pos:column="49">2</lit:literal></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <decl_stmt><decl><type><name pos:line="661" pos:column="4">Location</name></type> <name pos:line="661" pos:column="13">current</name> =<init pos:line="661" pos:column="22"> <expr><name pos:line="661" pos:column="23">token</name><op:operator pos:line="661" pos:column="28">.</op:operator><name pos:line="661" pos:column="29">start_</name> <op:operator pos:line="661" pos:column="36">+</op:operator> <lit:literal type="number" pos:line="661" pos:column="38">1</lit:literal></expr></init></decl>;</decl_stmt> <comment type="line" pos:line="661" pos:column="41">// skip '"'</comment>
   <decl_stmt><decl><type><name pos:line="662" pos:column="4">Location</name></type> <name pos:line="662" pos:column="13">end</name> =<init pos:line="662" pos:column="18"> <expr><name pos:line="662" pos:column="19">token</name><op:operator pos:line="662" pos:column="24">.</op:operator><name pos:line="662" pos:column="25">end_</name> <op:operator pos:line="662" pos:column="30">-</op:operator> <lit:literal type="number" pos:line="662" pos:column="32">1</lit:literal></expr></init></decl>;</decl_stmt>      <comment type="line" pos:line="662" pos:column="40">// do not include '"'</comment>
   <while pos:line="663" pos:column="4">while <condition pos:line="663" pos:column="10">( <expr><name pos:line="663" pos:column="12">current</name> <op:operator pos:line="663" pos:column="20">!=</op:operator> <name pos:line="663" pos:column="23">end</name></expr> )</condition>
   <block pos:line="664" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="665" pos:column="7">Char</name></type> <name pos:line="665" pos:column="12">c</name> =<init pos:line="665" pos:column="15"> <expr><op:operator pos:line="665" pos:column="16">*</op:operator><name pos:line="665" pos:column="17">current</name><op:operator pos:line="665" pos:column="24">++</op:operator></expr></init></decl>;</decl_stmt>
      <if pos:line="666" pos:column="7">if <condition pos:line="666" pos:column="10">( <expr><name pos:line="666" pos:column="12">c</name> <op:operator pos:line="666" pos:column="14">==</op:operator> <lit:literal type="char" pos:line="666" pos:column="17">'"'</lit:literal></expr> )</condition><then pos:line="666" pos:column="22">
         <break pos:line="667" pos:column="10">break;</break></then>
      <else pos:line="668" pos:column="7">else <if pos:line="668" pos:column="12">if <condition pos:line="668" pos:column="15">( <expr><name pos:line="668" pos:column="17">c</name> <op:operator pos:line="668" pos:column="19">==</op:operator> <lit:literal type="char" pos:line="668" pos:column="22">'\\'</lit:literal></expr> )</condition><then pos:line="668" pos:column="28">
      <block pos:line="669" pos:column="7">{
         <if pos:line="670" pos:column="10">if <condition pos:line="670" pos:column="13">( <expr><name pos:line="670" pos:column="15">current</name> <op:operator pos:line="670" pos:column="23">==</op:operator> <name pos:line="670" pos:column="26">end</name></expr> )</condition><then pos:line="670" pos:column="31">
            <return pos:line="671" pos:column="13">return <expr><call><name pos:line="671" pos:column="20">addError</name><argument_list pos:line="671" pos:column="28">( <argument><expr><lit:literal type="string" pos:line="671" pos:column="30">"Empty escape sequence in string"</lit:literal></expr></argument>, <argument><expr><name pos:line="671" pos:column="65">token</name></expr></argument>, <argument><expr><name pos:line="671" pos:column="72">current</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
         <decl_stmt><decl><type><name pos:line="672" pos:column="10">Char</name></type> <name pos:line="672" pos:column="15">escape</name> =<init pos:line="672" pos:column="23"> <expr><op:operator pos:line="672" pos:column="24">*</op:operator><name pos:line="672" pos:column="25">current</name><op:operator pos:line="672" pos:column="32">++</op:operator></expr></init></decl>;</decl_stmt>
         <switch pos:line="673" pos:column="10">switch <condition pos:line="673" pos:column="17">( <expr><name pos:line="673" pos:column="19">escape</name></expr> )</condition>
         <block pos:line="674" pos:column="10">{
         <case pos:line="675" pos:column="10">case <expr><lit:literal type="char" pos:line="675" pos:column="15">'"'</lit:literal></expr>: <expr_stmt><expr><name pos:line="675" pos:column="20">decoded</name> <op:operator pos:line="675" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="675" pos:column="31">'"'</lit:literal></expr>;</expr_stmt> <break pos:line="675" pos:column="36">break;</break>
         </case><case pos:line="676" pos:column="10">case <expr><lit:literal type="char" pos:line="676" pos:column="15">'/'</lit:literal></expr>: <expr_stmt><expr><name pos:line="676" pos:column="20">decoded</name> <op:operator pos:line="676" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="676" pos:column="31">'/'</lit:literal></expr>;</expr_stmt> <break pos:line="676" pos:column="36">break;</break>
         </case><case pos:line="677" pos:column="10">case <expr><lit:literal type="char" pos:line="677" pos:column="15">'\\'</lit:literal></expr>: <expr_stmt><expr><name pos:line="677" pos:column="21">decoded</name> <op:operator pos:line="677" pos:column="29">+=</op:operator> <lit:literal type="char" pos:line="677" pos:column="32">'\\'</lit:literal></expr>;</expr_stmt> <break pos:line="677" pos:column="38">break;</break>
         </case><case pos:line="678" pos:column="10">case <expr><lit:literal type="char" pos:line="678" pos:column="15">'b'</lit:literal></expr>: <expr_stmt><expr><name pos:line="678" pos:column="20">decoded</name> <op:operator pos:line="678" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="678" pos:column="31">'\b'</lit:literal></expr>;</expr_stmt> <break pos:line="678" pos:column="37">break;</break>
         </case><case pos:line="679" pos:column="10">case <expr><lit:literal type="char" pos:line="679" pos:column="15">'f'</lit:literal></expr>: <expr_stmt><expr><name pos:line="679" pos:column="20">decoded</name> <op:operator pos:line="679" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="679" pos:column="31">'\f'</lit:literal></expr>;</expr_stmt> <break pos:line="679" pos:column="37">break;</break>
         </case><case pos:line="680" pos:column="10">case <expr><lit:literal type="char" pos:line="680" pos:column="15">'n'</lit:literal></expr>: <expr_stmt><expr><name pos:line="680" pos:column="20">decoded</name> <op:operator pos:line="680" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="680" pos:column="31">'\n'</lit:literal></expr>;</expr_stmt> <break pos:line="680" pos:column="37">break;</break>
         </case><case pos:line="681" pos:column="10">case <expr><lit:literal type="char" pos:line="681" pos:column="15">'r'</lit:literal></expr>: <expr_stmt><expr><name pos:line="681" pos:column="20">decoded</name> <op:operator pos:line="681" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="681" pos:column="31">'\r'</lit:literal></expr>;</expr_stmt> <break pos:line="681" pos:column="37">break;</break>
         </case><case pos:line="682" pos:column="10">case <expr><lit:literal type="char" pos:line="682" pos:column="15">'t'</lit:literal></expr>: <expr_stmt><expr><name pos:line="682" pos:column="20">decoded</name> <op:operator pos:line="682" pos:column="28">+=</op:operator> <lit:literal type="char" pos:line="682" pos:column="31">'\t'</lit:literal></expr>;</expr_stmt> <break pos:line="682" pos:column="37">break;</break>
         </case><case pos:line="683" pos:column="10">case <expr><lit:literal type="char" pos:line="683" pos:column="15">'u'</lit:literal></expr>:
            <block pos:line="684" pos:column="13">{
               <decl_stmt><decl><type><name pos:line="685" pos:column="16">unsigned</name> <name pos:line="685" pos:column="25">int</name></type> <name pos:line="685" pos:column="29">unicode</name></decl>;</decl_stmt>
               <if pos:line="686" pos:column="16">if <condition pos:line="686" pos:column="19">( <expr><op:operator pos:line="686" pos:column="21">!</op:operator><call><name pos:line="686" pos:column="22">decodeUnicodeCodePoint</name><argument_list pos:line="686" pos:column="44">( <argument><expr><name pos:line="686" pos:column="46">token</name></expr></argument>, <argument><expr><name pos:line="686" pos:column="53">current</name></expr></argument>, <argument><expr><name pos:line="686" pos:column="62">end</name></expr></argument>, <argument><expr><name pos:line="686" pos:column="67">unicode</name></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="686" pos:column="78">
                  <return pos:line="687" pos:column="19">return <expr><lit:literal type="boolean" pos:line="687" pos:column="26">false</lit:literal></expr>;</return></then></if>
               <expr_stmt><expr><name pos:line="688" pos:column="16">decoded</name> <op:operator pos:line="688" pos:column="24">+=</op:operator> <call><name pos:line="688" pos:column="27">codePointToUTF8</name><argument_list pos:line="688" pos:column="42">(<argument><expr><name pos:line="688" pos:column="43">unicode</name></expr></argument>)</argument_list></call></expr>;</expr_stmt>
            }</block>
            <break pos:line="690" pos:column="13">break;</break>
         </case><default pos:line="691" pos:column="10">default:
            <return pos:line="692" pos:column="13">return <expr><call><name pos:line="692" pos:column="20">addError</name><argument_list pos:line="692" pos:column="28">( <argument><expr><lit:literal type="string" pos:line="692" pos:column="30">"Bad escape sequence in string"</lit:literal></expr></argument>, <argument><expr><name pos:line="692" pos:column="63">token</name></expr></argument>, <argument><expr><name pos:line="692" pos:column="70">current</name></expr></argument> )</argument_list></call></expr>;</return>
         </default>}</block></switch>
      }</block></then>
      <else pos:line="695" pos:column="7">else
      <block pos:line="696" pos:column="7">{
         <expr_stmt><expr><name pos:line="697" pos:column="10">decoded</name> <op:operator pos:line="697" pos:column="18">+=</op:operator> <name pos:line="697" pos:column="21">c</name></expr>;</expr_stmt>
      }</block></else></if></else></if>
   }</block></while>
   <return pos:line="700" pos:column="4">return <expr><lit:literal type="boolean" pos:line="700" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>

<function><type><name pos:line="703" pos:column="1">bool</name></type>
<name><name pos:line="704" pos:column="1">Reader</name><op:operator pos:line="704" pos:column="7">::</op:operator><name pos:line="704" pos:column="9">decodeUnicodeCodePoint</name></name><parameter_list pos:line="704" pos:column="31">( <param><decl><type><name pos:line="704" pos:column="33">Token</name> <type:modifier pos:line="704" pos:column="39">&amp;</type:modifier></type><name pos:line="704" pos:column="40">token</name></decl></param>, 
                                     <param><decl><type><name pos:line="705" pos:column="38">Location</name> <type:modifier pos:line="705" pos:column="47">&amp;</type:modifier></type><name pos:line="705" pos:column="48">current</name></decl></param>, 
                                     <param><decl><type><name pos:line="706" pos:column="38">Location</name></type> <name pos:line="706" pos:column="47">end</name></decl></param>, 
                                     <param><decl><type><name pos:line="707" pos:column="38">unsigned</name> <name pos:line="707" pos:column="47">int</name> <type:modifier pos:line="707" pos:column="51">&amp;</type:modifier></type><name pos:line="707" pos:column="52">unicode</name></decl></param> )</parameter_list>
<block pos:line="708" pos:column="1">{

   <if pos:line="710" pos:column="4">if <condition pos:line="710" pos:column="7">( <expr><op:operator pos:line="710" pos:column="9">!</op:operator><call><name pos:line="710" pos:column="10">decodeUnicodeEscapeSequence</name><argument_list pos:line="710" pos:column="37">( <argument><expr><name pos:line="710" pos:column="39">token</name></expr></argument>, <argument><expr><name pos:line="710" pos:column="46">current</name></expr></argument>, <argument><expr><name pos:line="710" pos:column="55">end</name></expr></argument>, <argument><expr><name pos:line="710" pos:column="60">unicode</name></expr></argument> )</argument_list></call></expr> )</condition><then pos:line="710" pos:column="71">
      <return pos:line="711" pos:column="7">return <expr><lit:literal type="boolean" pos:line="711" pos:column="14">false</lit:literal></expr>;</return></then></if>
   <if pos:line="712" pos:column="4">if <condition pos:line="712" pos:column="7">(<expr><name pos:line="712" pos:column="8">unicode</name> <op:operator pos:line="712" pos:column="16">&gt;=</op:operator> <lit:literal type="number" pos:line="712" pos:column="19">0xD800</lit:literal> <op:operator pos:line="712" pos:column="26">&amp;&amp;</op:operator> <name pos:line="712" pos:column="29">unicode</name> <op:operator pos:line="712" pos:column="37">&lt;=</op:operator> <lit:literal type="number" pos:line="712" pos:column="40">0xDBFF</lit:literal></expr>)</condition><then pos:line="712" pos:column="47">
   <block pos:line="713" pos:column="4">{
      <comment type="line" pos:line="714" pos:column="7">// surrogate pairs</comment>
      <if pos:line="715" pos:column="7">if <condition pos:line="715" pos:column="10">(<expr><name pos:line="715" pos:column="11">end</name> <op:operator pos:line="715" pos:column="15">-</op:operator> <name pos:line="715" pos:column="17">current</name> <op:operator pos:line="715" pos:column="25">&lt;</op:operator> <lit:literal type="number" pos:line="715" pos:column="27">6</lit:literal></expr>)</condition><then pos:line="715" pos:column="29">
         <return pos:line="716" pos:column="10">return <expr><call><name pos:line="716" pos:column="17">addError</name><argument_list pos:line="716" pos:column="25">( <argument><expr><lit:literal type="string" pos:line="716" pos:column="27">"additional six characters expected to parse unicode surrogate pair."</lit:literal></expr></argument>, <argument><expr><name pos:line="716" pos:column="98">token</name></expr></argument>, <argument><expr><name pos:line="716" pos:column="105">current</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
      <decl_stmt><decl><type><name pos:line="717" pos:column="7">unsigned</name> <name pos:line="717" pos:column="16">int</name></type> <name pos:line="717" pos:column="20">surrogatePair</name></decl>;</decl_stmt>
      <if pos:line="718" pos:column="7">if <condition pos:line="718" pos:column="10">(<expr><op:operator pos:line="718" pos:column="11">*</op:operator><op:operator pos:line="718" pos:column="12">(</op:operator><name pos:line="718" pos:column="13">current</name><op:operator pos:line="718" pos:column="20">++</op:operator><op:operator pos:line="718" pos:column="22">)</op:operator> <op:operator pos:line="718" pos:column="24">==</op:operator> <lit:literal type="char" pos:line="718" pos:column="27">'\\'</lit:literal> <op:operator pos:line="718" pos:column="32">&amp;&amp;</op:operator> <op:operator pos:line="718" pos:column="35">*</op:operator><op:operator pos:line="718" pos:column="36">(</op:operator><name pos:line="718" pos:column="37">current</name><op:operator pos:line="718" pos:column="44">++</op:operator><op:operator pos:line="718" pos:column="46">)</op:operator><op:operator pos:line="718" pos:column="47">==</op:operator> <lit:literal type="char" pos:line="718" pos:column="50">'u'</lit:literal></expr>)</condition><then pos:line="718" pos:column="54">
      <block pos:line="719" pos:column="7">{
         <if pos:line="720" pos:column="10">if <condition pos:line="720" pos:column="13">(<expr><call><name pos:line="720" pos:column="14">decodeUnicodeEscapeSequence</name><argument_list pos:line="720" pos:column="41">( <argument><expr><name pos:line="720" pos:column="43">token</name></expr></argument>, <argument><expr><name pos:line="720" pos:column="50">current</name></expr></argument>, <argument><expr><name pos:line="720" pos:column="59">end</name></expr></argument>, <argument><expr><name pos:line="720" pos:column="64">surrogatePair</name></expr></argument> )</argument_list></call></expr>)</condition><then pos:line="720" pos:column="80">
         <block pos:line="721" pos:column="10">{
            <expr_stmt><expr><name pos:line="722" pos:column="13">unicode</name> <op:operator pos:line="722" pos:column="21">=</op:operator> <lit:literal type="number" pos:line="722" pos:column="23">0x10000</lit:literal> <op:operator pos:line="722" pos:column="31">+</op:operator> <op:operator pos:line="722" pos:column="33">(</op:operator><op:operator pos:line="722" pos:column="34">(</op:operator><name pos:line="722" pos:column="35">unicode</name> <op:operator pos:line="722" pos:column="43">&amp;</op:operator> <lit:literal type="number" pos:line="722" pos:column="45">0x3FF</lit:literal><op:operator pos:line="722" pos:column="50">)</op:operator> <op:operator pos:line="722" pos:column="52">&lt;&lt;</op:operator> <lit:literal type="number" pos:line="722" pos:column="55">10</lit:literal><op:operator pos:line="722" pos:column="57">)</op:operator> <op:operator pos:line="722" pos:column="59">+</op:operator> <op:operator pos:line="722" pos:column="61">(</op:operator><name pos:line="722" pos:column="62">surrogatePair</name> <op:operator pos:line="722" pos:column="76">&amp;</op:operator> <lit:literal type="number" pos:line="722" pos:column="78">0x3FF</lit:literal><op:operator pos:line="722" pos:column="83">)</op:operator></expr>;</expr_stmt>
         }</block></then> 
         <else pos:line="724" pos:column="10">else
            <return pos:line="725" pos:column="13">return <expr><lit:literal type="boolean" pos:line="725" pos:column="20">false</lit:literal></expr>;</return></else></if>
      }</block></then> 
      <else pos:line="727" pos:column="7">else
         <return pos:line="728" pos:column="10">return <expr><call><name pos:line="728" pos:column="17">addError</name><argument_list pos:line="728" pos:column="25">( <argument><expr><lit:literal type="string" pos:line="728" pos:column="27">"expecting another \\u token to begin the second half of a unicode surrogate pair"</lit:literal></expr></argument>, <argument><expr><name pos:line="728" pos:column="111">token</name></expr></argument>, <argument><expr><name pos:line="728" pos:column="118">current</name></expr></argument> )</argument_list></call></expr>;</return></else></if>
   }</block></then></if>
   <return pos:line="730" pos:column="4">return <expr><lit:literal type="boolean" pos:line="730" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>

<function><type><name pos:line="733" pos:column="1">bool</name></type> 
<name><name pos:line="734" pos:column="1">Reader</name><op:operator pos:line="734" pos:column="7">::</op:operator><name pos:line="734" pos:column="9">decodeUnicodeEscapeSequence</name></name><parameter_list pos:line="734" pos:column="36">( <param><decl><type><name pos:line="734" pos:column="38">Token</name> <type:modifier pos:line="734" pos:column="44">&amp;</type:modifier></type><name pos:line="734" pos:column="45">token</name></decl></param>, 
                                     <param><decl><type><name pos:line="735" pos:column="38">Location</name> <type:modifier pos:line="735" pos:column="47">&amp;</type:modifier></type><name pos:line="735" pos:column="48">current</name></decl></param>, 
                                     <param><decl><type><name pos:line="736" pos:column="38">Location</name></type> <name pos:line="736" pos:column="47">end</name></decl></param>, 
                                     <param><decl><type><name pos:line="737" pos:column="38">unsigned</name> <name pos:line="737" pos:column="47">int</name> <type:modifier pos:line="737" pos:column="51">&amp;</type:modifier></type><name pos:line="737" pos:column="52">unicode</name></decl></param> )</parameter_list>
<block pos:line="738" pos:column="1">{
   <if pos:line="739" pos:column="4">if <condition pos:line="739" pos:column="7">( <expr><name pos:line="739" pos:column="9">end</name> <op:operator pos:line="739" pos:column="13">-</op:operator> <name pos:line="739" pos:column="15">current</name> <op:operator pos:line="739" pos:column="23">&lt;</op:operator> <lit:literal type="number" pos:line="739" pos:column="25">4</lit:literal></expr> )</condition><then pos:line="739" pos:column="28">
      <return pos:line="740" pos:column="7">return <expr><call><name pos:line="740" pos:column="14">addError</name><argument_list pos:line="740" pos:column="22">( <argument><expr><lit:literal type="string" pos:line="740" pos:column="24">"Bad unicode escape sequence in string: four digits expected."</lit:literal></expr></argument>, <argument><expr><name pos:line="740" pos:column="88">token</name></expr></argument>, <argument><expr><name pos:line="740" pos:column="95">current</name></expr></argument> )</argument_list></call></expr>;</return></then></if>
   <expr_stmt><expr><name pos:line="741" pos:column="4">unicode</name> <op:operator pos:line="741" pos:column="12">=</op:operator> <lit:literal type="number" pos:line="741" pos:column="14">0</lit:literal></expr>;</expr_stmt>
   <for pos:line="742" pos:column="4">for ( <init><decl><type><name pos:line="742" pos:column="10">int</name></type> <name pos:line="742" pos:column="14">index</name> =<init><expr><lit:literal type="number" pos:line="742" pos:column="21">0</lit:literal></expr></init></decl>;</init> <condition><expr><name pos:line="742" pos:column="24">index</name> <op:operator pos:line="742" pos:column="30">&lt;</op:operator> <lit:literal type="number" pos:line="742" pos:column="32">4</lit:literal></expr>;</condition> <incr><expr><op:operator pos:line="742" pos:column="35">++</op:operator><name pos:line="742" pos:column="37">index</name></expr></incr> )
   <block pos:line="743" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="744" pos:column="7">Char</name></type> <name pos:line="744" pos:column="12">c</name> =<init pos:line="744" pos:column="15"> <expr><op:operator pos:line="744" pos:column="16">*</op:operator><name pos:line="744" pos:column="17">current</name><op:operator pos:line="744" pos:column="24">++</op:operator></expr></init></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="745" pos:column="7">unicode</name> <op:operator pos:line="745" pos:column="15">*=</op:operator> <lit:literal type="number" pos:line="745" pos:column="18">16</lit:literal></expr>;</expr_stmt>
      <if pos:line="746" pos:column="7">if <condition pos:line="746" pos:column="10">( <expr><name pos:line="746" pos:column="12">c</name> <op:operator pos:line="746" pos:column="14">&gt;=</op:operator> <lit:literal type="char" pos:line="746" pos:column="17">'0'</lit:literal>  <op:operator pos:line="746" pos:column="22">&amp;&amp;</op:operator>  <name pos:line="746" pos:column="26">c</name> <op:operator pos:line="746" pos:column="28">&lt;=</op:operator> <lit:literal type="char" pos:line="746" pos:column="31">'9'</lit:literal></expr> )</condition><then pos:line="746" pos:column="36">
         <expr_stmt><expr><name pos:line="747" pos:column="10">unicode</name> <op:operator pos:line="747" pos:column="18">+=</op:operator> <name pos:line="747" pos:column="21">c</name> <op:operator pos:line="747" pos:column="23">-</op:operator> <lit:literal type="char" pos:line="747" pos:column="25">'0'</lit:literal></expr>;</expr_stmt></then>
      <else pos:line="748" pos:column="7">else <if pos:line="748" pos:column="12">if <condition pos:line="748" pos:column="15">( <expr><name pos:line="748" pos:column="17">c</name> <op:operator pos:line="748" pos:column="19">&gt;=</op:operator> <lit:literal type="char" pos:line="748" pos:column="22">'a'</lit:literal>  <op:operator pos:line="748" pos:column="27">&amp;&amp;</op:operator>  <name pos:line="748" pos:column="31">c</name> <op:operator pos:line="748" pos:column="33">&lt;=</op:operator> <lit:literal type="char" pos:line="748" pos:column="36">'f'</lit:literal></expr> )</condition><then pos:line="748" pos:column="41">
         <expr_stmt><expr><name pos:line="749" pos:column="10">unicode</name> <op:operator pos:line="749" pos:column="18">+=</op:operator> <name pos:line="749" pos:column="21">c</name> <op:operator pos:line="749" pos:column="23">-</op:operator> <lit:literal type="char" pos:line="749" pos:column="25">'a'</lit:literal> <op:operator pos:line="749" pos:column="29">+</op:operator> <lit:literal type="number" pos:line="749" pos:column="31">10</lit:literal></expr>;</expr_stmt></then>
      <else pos:line="750" pos:column="7">else <if pos:line="750" pos:column="12">if <condition pos:line="750" pos:column="15">( <expr><name pos:line="750" pos:column="17">c</name> <op:operator pos:line="750" pos:column="19">&gt;=</op:operator> <lit:literal type="char" pos:line="750" pos:column="22">'A'</lit:literal>  <op:operator pos:line="750" pos:column="27">&amp;&amp;</op:operator>  <name pos:line="750" pos:column="31">c</name> <op:operator pos:line="750" pos:column="33">&lt;=</op:operator> <lit:literal type="char" pos:line="750" pos:column="36">'F'</lit:literal></expr> )</condition><then pos:line="750" pos:column="41">
         <expr_stmt><expr><name pos:line="751" pos:column="10">unicode</name> <op:operator pos:line="751" pos:column="18">+=</op:operator> <name pos:line="751" pos:column="21">c</name> <op:operator pos:line="751" pos:column="23">-</op:operator> <lit:literal type="char" pos:line="751" pos:column="25">'A'</lit:literal> <op:operator pos:line="751" pos:column="29">+</op:operator> <lit:literal type="number" pos:line="751" pos:column="31">10</lit:literal></expr>;</expr_stmt></then>
      <else pos:line="752" pos:column="7">else
         <return pos:line="753" pos:column="10">return <expr><call><name pos:line="753" pos:column="17">addError</name><argument_list pos:line="753" pos:column="25">( <argument><expr><lit:literal type="string" pos:line="753" pos:column="27">"Bad unicode escape sequence in string: hexadecimal digit expected."</lit:literal></expr></argument>, <argument><expr><name pos:line="753" pos:column="97">token</name></expr></argument>, <argument><expr><name pos:line="753" pos:column="104">current</name></expr></argument> )</argument_list></call></expr>;</return></else></if></else></if></else></if>
   }</block></for>
   <return pos:line="755" pos:column="4">return <expr><lit:literal type="boolean" pos:line="755" pos:column="11">true</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="759" pos:column="1">bool</name></type> 
<name><name pos:line="760" pos:column="1">Reader</name><op:operator pos:line="760" pos:column="7">::</op:operator><name pos:line="760" pos:column="9">addError</name></name><parameter_list pos:line="760" pos:column="17">( <param><decl><type><name pos:line="760" pos:column="19">const</name> <name><name pos:line="760" pos:column="25">std</name><op:operator pos:line="760" pos:column="28">::</op:operator><name pos:line="760" pos:column="30">string</name></name> <type:modifier pos:line="760" pos:column="37">&amp;</type:modifier></type><name pos:line="760" pos:column="38">message</name></decl></param>, 
                  <param><decl><type><name pos:line="761" pos:column="19">Token</name> <type:modifier pos:line="761" pos:column="25">&amp;</type:modifier></type><name pos:line="761" pos:column="26">token</name></decl></param>,
                  <param><decl><type><name pos:line="762" pos:column="19">Location</name></type> <name pos:line="762" pos:column="28">extra</name></decl></param> )</parameter_list>
<block pos:line="763" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="764" pos:column="4">ErrorInfo</name></type> <name pos:line="764" pos:column="14">info</name></decl>;</decl_stmt>
   <expr_stmt><expr><name pos:line="765" pos:column="4">info</name><op:operator pos:line="765" pos:column="8">.</op:operator><name pos:line="765" pos:column="9">token_</name> <op:operator pos:line="765" pos:column="16">=</op:operator> <name pos:line="765" pos:column="18">token</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="766" pos:column="4">info</name><op:operator pos:line="766" pos:column="8">.</op:operator><name pos:line="766" pos:column="9">message_</name> <op:operator pos:line="766" pos:column="18">=</op:operator> <name pos:line="766" pos:column="20">message</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="767" pos:column="4">info</name><op:operator pos:line="767" pos:column="8">.</op:operator><name pos:line="767" pos:column="9">extra_</name> <op:operator pos:line="767" pos:column="16">=</op:operator> <name pos:line="767" pos:column="18">extra</name></expr>;</expr_stmt>
   <expr_stmt><expr><name pos:line="768" pos:column="4">errors_</name><op:operator pos:line="768" pos:column="11">.</op:operator><call><name pos:line="768" pos:column="12">push_back</name><argument_list pos:line="768" pos:column="21">( <argument><expr><name pos:line="768" pos:column="23">info</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <return pos:line="769" pos:column="4">return <expr><lit:literal type="boolean" pos:line="769" pos:column="11">false</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="773" pos:column="1">bool</name></type> 
<name><name pos:line="774" pos:column="1">Reader</name><op:operator pos:line="774" pos:column="7">::</op:operator><name pos:line="774" pos:column="9">recoverFromError</name></name><parameter_list pos:line="774" pos:column="25">( <param><decl><type><name pos:line="774" pos:column="27">TokenType</name></type> <name pos:line="774" pos:column="37">skipUntilToken</name></decl></param> )</parameter_list>
<block pos:line="775" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="776" pos:column="4">int</name></type> <name pos:line="776" pos:column="8">errorCount</name> =<init pos:line="776" pos:column="20"> <expr><call><name pos:line="776" pos:column="21">int</name><argument_list pos:line="776" pos:column="24">(<argument><expr><name pos:line="776" pos:column="25">errors_</name><op:operator pos:line="776" pos:column="32">.</op:operator><call><name pos:line="776" pos:column="33">size</name><argument_list pos:line="776" pos:column="37">()</argument_list></call></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="777" pos:column="4">Token</name></type> <name pos:line="777" pos:column="10">skip</name></decl>;</decl_stmt>
   <while pos:line="778" pos:column="4">while <condition pos:line="778" pos:column="10">( <expr><lit:literal type="boolean" pos:line="778" pos:column="12">true</lit:literal></expr> )</condition>
   <block pos:line="779" pos:column="4">{
      <if pos:line="780" pos:column="7">if <condition pos:line="780" pos:column="10">( <expr><op:operator pos:line="780" pos:column="12">!</op:operator><call><name pos:line="780" pos:column="13">readToken</name><argument_list pos:line="780" pos:column="22">(<argument><expr><name pos:line="780" pos:column="23">skip</name></expr></argument>)</argument_list></call></expr> )</condition><then pos:line="780" pos:column="30">
         <expr_stmt><expr><name pos:line="781" pos:column="10">errors_</name><op:operator pos:line="781" pos:column="17">.</op:operator><call><name pos:line="781" pos:column="18">resize</name><argument_list pos:line="781" pos:column="24">( <argument><expr><name pos:line="781" pos:column="26">errorCount</name></expr></argument> )</argument_list></call></expr>;</expr_stmt></then></if> <comment type="line" pos:line="781" pos:column="40">// discard errors caused by recovery</comment>
      <if pos:line="782" pos:column="7">if <condition pos:line="782" pos:column="10">( <expr><name pos:line="782" pos:column="12">skip</name><op:operator pos:line="782" pos:column="16">.</op:operator><name pos:line="782" pos:column="17">type_</name> <op:operator pos:line="782" pos:column="23">==</op:operator> <name pos:line="782" pos:column="26">skipUntilToken</name>  <op:operator pos:line="782" pos:column="42">||</op:operator>  <name pos:line="782" pos:column="46">skip</name><op:operator pos:line="782" pos:column="50">.</op:operator><name pos:line="782" pos:column="51">type_</name> <op:operator pos:line="782" pos:column="57">==</op:operator> <name pos:line="782" pos:column="60">tokenEndOfStream</name></expr> )</condition><then pos:line="782" pos:column="78">
         <break pos:line="783" pos:column="10">break;</break></then></if>
   }</block></while>
   <expr_stmt><expr><name pos:line="785" pos:column="4">errors_</name><op:operator pos:line="785" pos:column="11">.</op:operator><call><name pos:line="785" pos:column="12">resize</name><argument_list pos:line="785" pos:column="18">( <argument><expr><name pos:line="785" pos:column="20">errorCount</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <return pos:line="786" pos:column="4">return <expr><lit:literal type="boolean" pos:line="786" pos:column="11">false</lit:literal></expr>;</return>
}</block></function>


<function><type><name pos:line="790" pos:column="1">bool</name></type> 
<name><name pos:line="791" pos:column="1">Reader</name><op:operator pos:line="791" pos:column="7">::</op:operator><name pos:line="791" pos:column="9">addErrorAndRecover</name></name><parameter_list pos:line="791" pos:column="27">( <param><decl><type><name pos:line="791" pos:column="29">const</name> <name><name pos:line="791" pos:column="35">std</name><op:operator pos:line="791" pos:column="38">::</op:operator><name pos:line="791" pos:column="40">string</name></name> <type:modifier pos:line="791" pos:column="47">&amp;</type:modifier></type><name pos:line="791" pos:column="48">message</name></decl></param>, 
                            <param><decl><type><name pos:line="792" pos:column="29">Token</name> <type:modifier pos:line="792" pos:column="35">&amp;</type:modifier></type><name pos:line="792" pos:column="36">token</name></decl></param>,
                            <param><decl><type><name pos:line="793" pos:column="29">TokenType</name></type> <name pos:line="793" pos:column="39">skipUntilToken</name></decl></param> )</parameter_list>
<block pos:line="794" pos:column="1">{
   <expr_stmt><expr><call><name pos:line="795" pos:column="4">addError</name><argument_list pos:line="795" pos:column="12">( <argument><expr><name pos:line="795" pos:column="14">message</name></expr></argument>, <argument><expr><name pos:line="795" pos:column="23">token</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <return pos:line="796" pos:column="4">return <expr><call><name pos:line="796" pos:column="11">recoverFromError</name><argument_list pos:line="796" pos:column="27">( <argument><expr><name pos:line="796" pos:column="29">skipUntilToken</name></expr></argument> )</argument_list></call></expr>;</return>
}</block></function>


<function><type><name pos:line="800" pos:column="1">Value</name> <type:modifier pos:line="800" pos:column="7">&amp;</type:modifier></type>
<name><name pos:line="801" pos:column="1">Reader</name><op:operator pos:line="801" pos:column="7">::</op:operator><name pos:line="801" pos:column="9">currentValue</name></name><parameter_list pos:line="801" pos:column="21">()</parameter_list>
<block pos:line="802" pos:column="1">{
   <return pos:line="803" pos:column="4">return <expr><op:operator pos:line="803" pos:column="11">*</op:operator><op:operator pos:line="803" pos:column="12">(</op:operator><name pos:line="803" pos:column="13">nodes_</name><op:operator pos:line="803" pos:column="19">.</op:operator><call><name pos:line="803" pos:column="20">top</name><argument_list pos:line="803" pos:column="23">()</argument_list></call><op:operator pos:line="803" pos:column="25">)</op:operator></expr>;</return>
}</block></function>


<function><type><name><name pos:line="807" pos:column="1">Reader</name><op:operator pos:line="807" pos:column="7">::</op:operator><name pos:line="807" pos:column="9">Char</name></name></type> 
<name><name pos:line="808" pos:column="1">Reader</name><op:operator pos:line="808" pos:column="7">::</op:operator><name pos:line="808" pos:column="9">getNextChar</name></name><parameter_list pos:line="808" pos:column="20">()</parameter_list>
<block pos:line="809" pos:column="1">{
   <if pos:line="810" pos:column="4">if <condition pos:line="810" pos:column="7">( <expr><name pos:line="810" pos:column="9">current_</name> <op:operator pos:line="810" pos:column="18">==</op:operator> <name pos:line="810" pos:column="21">end_</name></expr> )</condition><then pos:line="810" pos:column="27">
      <return pos:line="811" pos:column="7">return <expr><lit:literal type="number" pos:line="811" pos:column="14">0</lit:literal></expr>;</return></then></if>
   <return pos:line="812" pos:column="4">return <expr><op:operator pos:line="812" pos:column="11">*</op:operator><name pos:line="812" pos:column="12">current_</name><op:operator pos:line="812" pos:column="20">++</op:operator></expr>;</return>
}</block></function>


<function><type><name pos:line="816" pos:column="1">void</name></type> 
<name><name pos:line="817" pos:column="1">Reader</name><op:operator pos:line="817" pos:column="7">::</op:operator><name pos:line="817" pos:column="9">getLocationLineAndColumn</name></name><parameter_list pos:line="817" pos:column="33">( <param><decl><type><name pos:line="817" pos:column="35">Location</name></type> <name pos:line="817" pos:column="44">location</name></decl></param>,
                                  <param><decl><type><name pos:line="818" pos:column="35">int</name> <type:modifier pos:line="818" pos:column="39">&amp;</type:modifier></type><name pos:line="818" pos:column="40">line</name></decl></param>,
                                  <param><decl><type><name pos:line="819" pos:column="35">int</name> <type:modifier pos:line="819" pos:column="39">&amp;</type:modifier></type><name pos:line="819" pos:column="40">column</name></decl></param> )</parameter_list> <specifier pos:line="819" pos:column="49">const</specifier>
<block pos:line="820" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="821" pos:column="4">Location</name></type> <name pos:line="821" pos:column="13">current</name> =<init pos:line="821" pos:column="22"> <expr><name pos:line="821" pos:column="23">begin_</name></expr></init></decl>;</decl_stmt>
   <decl_stmt><decl><type><name pos:line="822" pos:column="4">Location</name></type> <name pos:line="822" pos:column="13">lastLineStart</name> =<init pos:line="822" pos:column="28"> <expr><name pos:line="822" pos:column="29">current</name></expr></init></decl>;</decl_stmt>
   <expr_stmt><expr><name pos:line="823" pos:column="4">line</name> <op:operator pos:line="823" pos:column="9">=</op:operator> <lit:literal type="number" pos:line="823" pos:column="11">0</lit:literal></expr>;</expr_stmt>
   <while pos:line="824" pos:column="4">while <condition pos:line="824" pos:column="10">( <expr><name pos:line="824" pos:column="12">current</name> <op:operator pos:line="824" pos:column="20">&lt;</op:operator> <name pos:line="824" pos:column="22">location</name>  <op:operator pos:line="824" pos:column="32">&amp;&amp;</op:operator>  <name pos:line="824" pos:column="36">current</name> <op:operator pos:line="824" pos:column="44">!=</op:operator> <name pos:line="824" pos:column="47">end_</name></expr> )</condition>
   <block pos:line="825" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="826" pos:column="7">Char</name></type> <name pos:line="826" pos:column="12">c</name> =<init pos:line="826" pos:column="15"> <expr><op:operator pos:line="826" pos:column="16">*</op:operator><name pos:line="826" pos:column="17">current</name><op:operator pos:line="826" pos:column="24">++</op:operator></expr></init></decl>;</decl_stmt>
      <if pos:line="827" pos:column="7">if <condition pos:line="827" pos:column="10">( <expr><name pos:line="827" pos:column="12">c</name> <op:operator pos:line="827" pos:column="14">==</op:operator> <lit:literal type="char" pos:line="827" pos:column="17">'\r'</lit:literal></expr> )</condition><then pos:line="827" pos:column="23">
      <block pos:line="828" pos:column="7">{
         <if pos:line="829" pos:column="10">if <condition pos:line="829" pos:column="13">( <expr><op:operator pos:line="829" pos:column="15">*</op:operator><name pos:line="829" pos:column="16">current</name> <op:operator pos:line="829" pos:column="24">==</op:operator> <lit:literal type="char" pos:line="829" pos:column="27">'\n'</lit:literal></expr> )</condition><then pos:line="829" pos:column="33">
            <expr_stmt><expr><op:operator pos:line="830" pos:column="13">++</op:operator><name pos:line="830" pos:column="15">current</name></expr>;</expr_stmt></then></if>
         <expr_stmt><expr><name pos:line="831" pos:column="10">lastLineStart</name> <op:operator pos:line="831" pos:column="24">=</op:operator> <name pos:line="831" pos:column="26">current</name></expr>;</expr_stmt>
         <expr_stmt><expr><op:operator pos:line="832" pos:column="10">++</op:operator><name pos:line="832" pos:column="12">line</name></expr>;</expr_stmt>
      }</block></then>
      <else pos:line="834" pos:column="7">else <if pos:line="834" pos:column="12">if <condition pos:line="834" pos:column="15">( <expr><name pos:line="834" pos:column="17">c</name> <op:operator pos:line="834" pos:column="19">==</op:operator> <lit:literal type="char" pos:line="834" pos:column="22">'\n'</lit:literal></expr> )</condition><then pos:line="834" pos:column="28">
      <block pos:line="835" pos:column="7">{
         <expr_stmt><expr><name pos:line="836" pos:column="10">lastLineStart</name> <op:operator pos:line="836" pos:column="24">=</op:operator> <name pos:line="836" pos:column="26">current</name></expr>;</expr_stmt>
         <expr_stmt><expr><op:operator pos:line="837" pos:column="10">++</op:operator><name pos:line="837" pos:column="12">line</name></expr>;</expr_stmt>
      }</block></then></if></else></if>
   }</block></while>
   <comment type="line" pos:line="840" pos:column="4">// column &amp; line start at 1</comment>
   <expr_stmt><expr><name pos:line="841" pos:column="4">column</name> <op:operator pos:line="841" pos:column="11">=</op:operator> <call><name pos:line="841" pos:column="13">int</name><argument_list pos:line="841" pos:column="16">(<argument><expr><name pos:line="841" pos:column="17">location</name> <op:operator pos:line="841" pos:column="26">-</op:operator> <name pos:line="841" pos:column="28">lastLineStart</name></expr></argument>)</argument_list></call> <op:operator pos:line="841" pos:column="43">+</op:operator> <lit:literal type="number" pos:line="841" pos:column="45">1</lit:literal></expr>;</expr_stmt>
   <expr_stmt><expr><op:operator pos:line="842" pos:column="4">++</op:operator><name pos:line="842" pos:column="6">line</name></expr>;</expr_stmt>
}</block></function>


<function><type><name><name pos:line="846" pos:column="1">std</name><op:operator pos:line="846" pos:column="4">::</op:operator><name pos:line="846" pos:column="6">string</name></name></type>
<name><name pos:line="847" pos:column="1">Reader</name><op:operator pos:line="847" pos:column="7">::</op:operator><name pos:line="847" pos:column="9">getLocationLineAndColumn</name></name><parameter_list pos:line="847" pos:column="33">( <param><decl><type><name pos:line="847" pos:column="35">Location</name></type> <name pos:line="847" pos:column="44">location</name></decl></param> )</parameter_list> <specifier pos:line="847" pos:column="55">const</specifier>
<block pos:line="848" pos:column="1">{
   <decl_stmt><decl><type><name pos:line="849" pos:column="4">int</name></type> <name pos:line="849" pos:column="8">line</name>, <name pos:line="849" pos:column="14">column</name></decl>;</decl_stmt>
   <expr_stmt><expr><call><name pos:line="850" pos:column="4">getLocationLineAndColumn</name><argument_list pos:line="850" pos:column="28">( <argument><expr><name pos:line="850" pos:column="30">location</name></expr></argument>, <argument><expr><name pos:line="850" pos:column="40">line</name></expr></argument>, <argument><expr><name pos:line="850" pos:column="46">column</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <decl_stmt><decl><type><name pos:line="851" pos:column="4">char</name></type> <name><name pos:line="851" pos:column="9">buffer</name><index pos:line="851" pos:column="15">[<expr><lit:literal type="number" pos:line="851" pos:column="16">18</lit:literal><op:operator pos:line="851" pos:column="18">+</op:operator><lit:literal type="number" pos:line="851" pos:column="19">16</lit:literal><op:operator pos:line="851" pos:column="21">+</op:operator><lit:literal type="number" pos:line="851" pos:column="22">16</lit:literal><op:operator pos:line="851" pos:column="24">+</op:operator><lit:literal type="number" pos:line="851" pos:column="25">1</lit:literal></expr>]</index></name></decl>;</decl_stmt>
   <expr_stmt><expr><call><name pos:line="852" pos:column="4">sprintf</name><argument_list pos:line="852" pos:column="11">( <argument><expr><name pos:line="852" pos:column="13">buffer</name></expr></argument>, <argument><expr><lit:literal type="string" pos:line="852" pos:column="21">"Line %d, Column %d"</lit:literal></expr></argument>, <argument><expr><name pos:line="852" pos:column="43">line</name></expr></argument>, <argument><expr><name pos:line="852" pos:column="49">column</name></expr></argument> )</argument_list></call></expr>;</expr_stmt>
   <return pos:line="853" pos:column="4">return <expr><name pos:line="853" pos:column="11">buffer</name></expr>;</return>
}</block></function>


<function><type><name><name pos:line="857" pos:column="1">std</name><op:operator pos:line="857" pos:column="4">::</op:operator><name pos:line="857" pos:column="6">string</name></name></type> 
<name><name pos:line="858" pos:column="1">Reader</name><op:operator pos:line="858" pos:column="7">::</op:operator><name pos:line="858" pos:column="9">getFormatedErrorMessages</name></name><parameter_list pos:line="858" pos:column="33">()</parameter_list> <specifier pos:line="858" pos:column="36">const</specifier>
<block pos:line="859" pos:column="1">{
   <decl_stmt><decl><type><name><name pos:line="860" pos:column="4">std</name><op:operator pos:line="860" pos:column="7">::</op:operator><name pos:line="860" pos:column="9">string</name></name></type> <name pos:line="860" pos:column="16">formattedMessage</name></decl>;</decl_stmt>
   <for pos:line="861" pos:column="4">for ( <init><decl><type><name><name pos:line="861" pos:column="10">Errors</name><op:operator pos:line="861" pos:column="16">::</op:operator><name pos:line="861" pos:column="18">const_iterator</name></name></type> <name pos:line="861" pos:column="33">itError</name> =<init pos:line="861" pos:column="42"> <expr><name pos:line="861" pos:column="43">errors_</name><op:operator pos:line="861" pos:column="50">.</op:operator><call><name pos:line="861" pos:column="51">begin</name><argument_list pos:line="861" pos:column="56">()</argument_list></call></expr></init></decl>;</init>
         <condition><expr><name pos:line="862" pos:column="10">itError</name> <op:operator pos:line="862" pos:column="18">!=</op:operator> <name pos:line="862" pos:column="21">errors_</name><op:operator pos:line="862" pos:column="28">.</op:operator><call><name pos:line="862" pos:column="29">end</name><argument_list pos:line="862" pos:column="32">()</argument_list></call></expr>;</condition>
         <incr><expr><op:operator pos:line="863" pos:column="10">++</op:operator><name pos:line="863" pos:column="12">itError</name></expr></incr> )
   <block pos:line="864" pos:column="4">{
      <decl_stmt><decl><type><name pos:line="865" pos:column="7">const</name> <name pos:line="865" pos:column="13">ErrorInfo</name> <type:modifier pos:line="865" pos:column="23">&amp;</type:modifier></type><name pos:line="865" pos:column="24">error</name> =<init pos:line="865" pos:column="31"> <expr><op:operator pos:line="865" pos:column="32">*</op:operator><name pos:line="865" pos:column="33">itError</name></expr></init></decl>;</decl_stmt>
      <expr_stmt><expr><name pos:line="866" pos:column="7">formattedMessage</name> <op:operator pos:line="866" pos:column="24">+=</op:operator> <lit:literal type="string" pos:line="866" pos:column="27">"* "</lit:literal> <op:operator pos:line="866" pos:column="32">+</op:operator> <call><name pos:line="866" pos:column="34">getLocationLineAndColumn</name><argument_list pos:line="866" pos:column="58">( <argument><expr><name pos:line="866" pos:column="60">error</name><op:operator pos:line="866" pos:column="65">.</op:operator><name pos:line="866" pos:column="66">token_</name><op:operator pos:line="866" pos:column="72">.</op:operator><name pos:line="866" pos:column="73">start_</name></expr></argument> )</argument_list></call> <op:operator pos:line="866" pos:column="82">+</op:operator> <lit:literal type="string" pos:line="866" pos:column="84">"\n"</lit:literal></expr>;</expr_stmt>
      <expr_stmt><expr><name pos:line="867" pos:column="7">formattedMessage</name> <op:operator pos:line="867" pos:column="24">+=</op:operator> <lit:literal type="string" pos:line="867" pos:column="27">"  "</lit:literal> <op:operator pos:line="867" pos:column="32">+</op:operator> <name pos:line="867" pos:column="34">error</name><op:operator pos:line="867" pos:column="39">.</op:operator><name pos:line="867" pos:column="40">message_</name> <op:operator pos:line="867" pos:column="49">+</op:operator> <lit:literal type="string" pos:line="867" pos:column="51">"\n"</lit:literal></expr>;</expr_stmt>
      <if pos:line="868" pos:column="7">if <condition pos:line="868" pos:column="10">( <expr><name pos:line="868" pos:column="12">error</name><op:operator pos:line="868" pos:column="17">.</op:operator><name pos:line="868" pos:column="18">extra_</name></expr> )</condition><then pos:line="868" pos:column="26">
         <expr_stmt><expr><name pos:line="869" pos:column="10">formattedMessage</name> <op:operator pos:line="869" pos:column="27">+=</op:operator> <lit:literal type="string" pos:line="869" pos:column="30">"See "</lit:literal> <op:operator pos:line="869" pos:column="37">+</op:operator> <call><name pos:line="869" pos:column="39">getLocationLineAndColumn</name><argument_list pos:line="869" pos:column="63">( <argument><expr><name pos:line="869" pos:column="65">error</name><op:operator pos:line="869" pos:column="70">.</op:operator><name pos:line="869" pos:column="71">extra_</name></expr></argument> )</argument_list></call> <op:operator pos:line="869" pos:column="80">+</op:operator> <lit:literal type="string" pos:line="869" pos:column="82">" for detail.\n"</lit:literal></expr>;</expr_stmt></then></if>
   }</block></for>
   <return pos:line="871" pos:column="4">return <expr><name pos:line="871" pos:column="11">formattedMessage</name></expr>;</return>
}</block></function>


<function><type><name><name pos:line="875" pos:column="1">std</name><op:operator pos:line="875" pos:column="4">::</op:operator><name pos:line="875" pos:column="6">istream</name></name><type:modifier pos:line="875" pos:column="13">&amp;</type:modifier></type> <name pos:line="875" pos:column="15">operator&gt;&gt;</name><parameter_list pos:line="875" pos:column="25">( <param><decl><type><name><name pos:line="875" pos:column="27">std</name><op:operator pos:line="875" pos:column="30">::</op:operator><name pos:line="875" pos:column="32">istream</name></name> <type:modifier pos:line="875" pos:column="40">&amp;</type:modifier></type><name pos:line="875" pos:column="41">sin</name></decl></param>, <param><decl><type><name pos:line="875" pos:column="46">Value</name> <type:modifier pos:line="875" pos:column="52">&amp;</type:modifier></type><name pos:line="875" pos:column="53">root</name></decl></param> )</parameter_list>
<block pos:line="876" pos:column="1">{
    <decl_stmt><decl><type><name><name pos:line="877" pos:column="5">Json</name><op:operator pos:line="877" pos:column="9">::</op:operator><name pos:line="877" pos:column="11">Reader</name></name></type> <name pos:line="877" pos:column="18">reader</name></decl>;</decl_stmt>
    <decl_stmt><decl><type><name pos:line="878" pos:column="5">bool</name></type> <name pos:line="878" pos:column="10">ok</name> =<init pos:line="878" pos:column="14"> <expr><name pos:line="878" pos:column="15">reader</name><op:operator pos:line="878" pos:column="21">.</op:operator><call><name pos:line="878" pos:column="22">parse</name><argument_list pos:line="878" pos:column="27">(<argument><expr><name pos:line="878" pos:column="28">sin</name></expr></argument>, <argument><expr><name pos:line="878" pos:column="33">root</name></expr></argument>, <argument><expr><lit:literal type="boolean" pos:line="878" pos:column="39">true</lit:literal></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
    <comment type="line" pos:line="879" pos:column="5">//JSON_ASSERT( ok );</comment>
    <if pos:line="880" pos:column="5">if <condition pos:line="880" pos:column="8">(<expr><op:operator pos:line="880" pos:column="9">!</op:operator><name pos:line="880" pos:column="10">ok</name></expr>)</condition><then pos:line="880" pos:column="13"> <throw pos:line="880" pos:column="14">throw <expr><call><name><name pos:line="880" pos:column="20">std</name><op:operator pos:line="880" pos:column="23">::</op:operator><name pos:line="880" pos:column="25">runtime_error</name></name><argument_list pos:line="880" pos:column="38">(<argument><expr><name pos:line="880" pos:column="39">reader</name><op:operator pos:line="880" pos:column="45">.</op:operator><call><name pos:line="880" pos:column="46">getFormatedErrorMessages</name><argument_list pos:line="880" pos:column="70">()</argument_list></call></expr></argument>)</argument_list></call></expr>;</throw></then></if>
    <return pos:line="881" pos:column="5">return <expr><name pos:line="881" pos:column="12">sin</name></expr>;</return>
}</block></function>


}</block></namespace> <comment type="line" pos:line="885" pos:column="3">// namespace Json</comment>
</unit>
